Compare commits

..

No commits in common. "79f1b3860ec2779da04a4f6f475a93995f8dda9f" and "462cae1cf1feeb0c2585d9b6906d43edb255ecb3" have entirely different histories.

8 changed files with 21 additions and 32 deletions

View File

@ -16,11 +16,12 @@ export function requestFetch(url, requestOptions, handler, errorHandler) {
console.log("requestFetch [requestOption] : ", requestOptions);
// Login 했을경우 JWT 설정
const sessionUser = getLocalItem('loginUser');
const sessionUserId = sessionUser?.userId || null;
const jToken = getLocalItem('jToken');
const sessionUser = parseJwt(jToken);
const sessionUserId = sessionUser?.id || null;
const userInfo = parseJwt(jToken);
const refreshToken = getLocalItem('refreshToken');
if(sessionUserId != null){
if(sessionUserId != null && sessionUserId !== undefined){
if( !requestOptions['headers'] ) requestOptions['headers']={}
if( !requestOptions['headers']['Authorization'] ) requestOptions['headers']['Authorization']=null;
requestOptions['headers']['Authorization'] = jToken;

View File

@ -38,7 +38,6 @@ function EgovHeader({ loginUser, onChangeLogin }) {
}
EgovNet.requestFetch(logOutUrl, requestOptions,
function (resp) {
debugger
console.log("===>>> logout resp= ", resp);
if (parseInt(resp.resultCode) === parseInt(CODE.RCV_SUCCESS)) {
onChangeLogin({ loginVO: {} });
@ -76,7 +75,7 @@ function EgovHeader({ loginUser, onChangeLogin }) {
<li><NavLink to={URL.INTRO} className={({ isActive }) => (isActive ? "cur" : "")}>정보마당</NavLink></li>
<li><NavLink to={URL.SUPPORT} className={({ isActive }) => (isActive ? "cur" : "")}>고객지원</NavLink></li>
<li><NavLink to={URL.INFORM} className={({ isActive }) => (isActive ? "cur" : "")}>알림마당</NavLink></li>
{sessionUserSe ==='ADM' &&
{sessionUserSe ==='USR' &&
<li><NavLink to={URL.ADMIN} className={({ isActive }) => (isActive ? "cur" : "")}>사이트관리</NavLink></li>
}
</ul>
@ -142,7 +141,7 @@ function EgovHeader({ loginUser, onChangeLogin }) {
<li><NavLink to={URL.INFORM_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트 갤러리</NavLink></li>
</ul>
</div>
{sessionUserSe ==='ADM' &&
{sessionUserSe ==='USR' &&
<div className="col">
<h3>사이트관리</h3>
<ul>
@ -208,7 +207,7 @@ function EgovHeader({ loginUser, onChangeLogin }) {
<li><NavLink to={URL.INFORM_GALLERY} className={({ isActive }) => (isActive ? "cur" : "")}>사이트 갤러리</NavLink></li>
</ul>
</div>
{sessionUserSe ==='ADM' &&
{sessionUserSe ==='USR' &&
<>
<h3><Link to={URL.ADMIN}>사이트관리</Link></h3>
<div className="submenu closed">

View File

@ -50,6 +50,9 @@ import java.util.UUID;
public class EgovJwtTokenUtil implements Serializable{
private static final long serialVersionUID = -5180902194184255251L;
//public static final long JWT_TOKEN_VALIDITY = 24 * 60 * 60; //하루
public static final long JWT_ACCESS_TOKEN_SEC = (30*60*1000); //엑세스 토큰의 유효시간 설정, 30분
public static final long JWT_REFRESH_TOKEN_SEC = (60*60*24*14*1000); //리프레시 토큰의 유효시간 설정, 2주
public static final String SECRET_KEY = EgovProperties.getProperty("Globals.jwt.secret");
private final RefreshTokenRepository refreshTokenRepository;
@ -86,10 +89,9 @@ public class EgovJwtTokenUtil implements Serializable{
//2. Sign the JWT using the HS512 algorithm and secret key.
//3. According to JWS Compact Serialization(https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-41#section-3.1)
// compaction of the JWT to a URL-safe string
public String generateToken(UserInfo loginVO, String remoteAddr, Long sec) {
public String generateToken(UserInfo loginVO, Long sec) {
Map<String, Object> claims = new HashMap<>();
claims.put("id", loginVO.getUserId() );
claims.put("remoteAddr", remoteAddr);
claims.put("userSe", loginVO.getUserSe() );
claims.put("type", "Authorization");
@ -104,13 +106,13 @@ public class EgovJwtTokenUtil implements Serializable{
return builder.compact();
}
public String generateAccessToken(UserInfo loginVO, String remoteAddr, Long sec) {
return generateToken(loginVO, remoteAddr, sec);
public String generateAccessToken(UserInfo loginVO) {
return generateToken(loginVO, JWT_ACCESS_TOKEN_SEC);
}
@Transactional
public String generateRefreshTokenToken(UserInfo loginVO, String remoteAddr, Long sec){
RefreshToken refreshToken = new RefreshToken(loginVO.getUserSeq(), generateToken(loginVO, remoteAddr, sec), remoteAddr);
public String generateRefreshTokenToken(UserInfo loginVO){
RefreshToken refreshToken = new RefreshToken(loginVO.getUserSeq(), generateToken(loginVO, JWT_REFRESH_TOKEN_SEC));
refreshTokenRepository.save(refreshToken);
return refreshToken.getRefreshToken();
}

View File

@ -17,6 +17,4 @@ public class RefreshToken {
private Integer userSeq;
@Indexed
private String refreshToken;
private String remoteAddr;
}

View File

@ -16,7 +16,6 @@ import org.springframework.security.web.savedrequest.RequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@ -27,10 +26,7 @@ public class CustomLogoutSuccessHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
Cookie refreshToken = new Cookie("refreshToken", null);
refreshToken.setMaxAge(0);
refreshToken.setPath("/");
response.addCookie(refreshToken);
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
MediaType jsonMimeType = MediaType.APPLICATION_JSON;

View File

@ -17,7 +17,6 @@ import org.springframework.security.web.savedrequest.RequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@ -29,8 +28,6 @@ public class CustomUrlAuthenticationSuccessHandler extends SimpleUrlAuthenticati
private final EgovJwtTokenUtil jwtTokenUtil;
private RequestCache requestCache = new HttpSessionRequestCache();
public static final long JWT_ACCESS_VALID_TIME = (30*60*1000); //엑세스 토큰의 유효시간 설정, 30분
public static final long JWT_REFRESH_VALID_TIME = (60*60*24*14*1000); //리프레시 토큰의 유효시간 설정, 2주
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
@ -55,16 +52,13 @@ public class CustomUrlAuthenticationSuccessHandler extends SimpleUrlAuthenticati
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
MediaType jsonMimeType = MediaType.APPLICATION_JSON;
String jwtToken = jwtTokenUtil.generateAccessToken(securityUser, request.getRemoteAddr(), JWT_ACCESS_VALID_TIME);
String refreshToken = jwtTokenUtil.generateRefreshTokenToken(securityUser, request.getRemoteAddr(), JWT_REFRESH_VALID_TIME);
HashMap<String, Object> resultMap = new HashMap<>();
String refreshToken = jwtTokenUtil.generateRefreshTokenToken(securityUser);
String jwtToken = jwtTokenUtil.generateAccessToken(securityUser);
HashMap<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("resultCode", "200");
resultMap.put("jToken", jwtToken);
resultMap.put("refreshToken", refreshToken);
resultMap.put("jToken", jwtToken);
response.addHeader("Authorization", "BEARER "+jwtToken);
Cookie refreshTokenCookie = new Cookie("refreshToken", refreshToken);
refreshTokenCookie.setMaxAge((int)JWT_REFRESH_VALID_TIME/1000);
response.addCookie(refreshTokenCookie);
if (jsonConverter.canWrite(resultMap.getClass(), jsonMimeType)) {
jsonConverter.write(resultMap, jsonMimeType, new ServletServerHttpResponse(response));
}

View File

@ -1,7 +1,6 @@
package com.dbnt.kcscbackend.standardCode.service;
public interface StandardCodeContentInterface {
String getDoc_cont_seq();
String getOnto_link_cd();
String getGroup_title();
String getCont_type_cd();

View File

@ -4,7 +4,7 @@ spring.mvc.pathmatch.matching-strategy=ant_path_matcher
# Page Config
Globals.pageUnit=10
Globals.pageSize=10o
Globals.pageSize=10
#JWT
# redisConfig