parent
9d1937a81d
commit
1a35c995d9
|
|
@ -3,6 +3,7 @@ import { SERVER_URL } from '../config';
|
|||
import URL from 'constants/url';
|
||||
import CODE from 'constants/code';
|
||||
import { getSessionItem, setSessionItem } from 'utils/storage';
|
||||
import { getLocalItem, setLocalItem } from 'utils/storage';
|
||||
|
||||
export function getQueryString(params){
|
||||
return `?${Object.entries(params).map(e => e.join('=')).join('&') }`
|
||||
|
|
@ -14,9 +15,10 @@ export function requestFetch(url, requestOptions, handler, errorHandler) {
|
|||
console.log("requestFetch [requestOption] : ", requestOptions);
|
||||
|
||||
// Login 했을경우 JWT 설정
|
||||
const sessionUser = getSessionItem('loginUser');
|
||||
const sessionUser = getLocalItem('loginUser');
|
||||
const sessionUserId = sessionUser?.userId || null;
|
||||
const jToken = getSessionItem('jToken');
|
||||
const jToken = getLocalItem('jToken');
|
||||
const refreshToken = getLocalItem('refreshToken');
|
||||
if(sessionUserId != null && sessionUserId !== undefined){
|
||||
if( !requestOptions['headers'] ) requestOptions['headers']={}
|
||||
if( !requestOptions['headers']['Authorization'] ) requestOptions['headers']['Authorization']=null;
|
||||
|
|
|
|||
|
|
@ -6,12 +6,13 @@ import * as EgovNet from 'api/egovFetch';
|
|||
import URL from 'constants/url';
|
||||
import CODE from 'constants/code';
|
||||
import { getSessionItem, setSessionItem } from 'utils/storage';
|
||||
import { getLocalItem, setLocalItem } from 'utils/storage';
|
||||
|
||||
function EgovHeader({ loginUser, onChangeLogin }) {
|
||||
console.group("EgovHeader");
|
||||
console.log("[Start] EgovHeader ------------------------------");
|
||||
|
||||
const sessionUser = getSessionItem('loginUser');
|
||||
const sessionUser = getLocalItem('loginUser');
|
||||
const sessionUserId = sessionUser?.userId;
|
||||
const sessionUserSe = sessionUser?.userSe;
|
||||
|
||||
|
|
@ -38,8 +39,9 @@ function EgovHeader({ loginUser, onChangeLogin }) {
|
|||
console.log("===>>> logout resp= ", resp);
|
||||
if (parseInt(resp.resultCode) === parseInt(CODE.RCV_SUCCESS)) {
|
||||
onChangeLogin({ loginVO: {} });
|
||||
setSessionItem('loginUser', {"id":""});
|
||||
setSessionItem('jToken', null);
|
||||
setLocalItem('loginUser', {"id":""});
|
||||
setLocalItem('jToken', null);
|
||||
setLocalItem('refreshToken', null);
|
||||
window.alert("로그아웃되었습니다!");
|
||||
navigate(URL.MAIN);
|
||||
// PC와 Mobile 열린메뉴 닫기: 2023.04.13(목) 김일국 추가
|
||||
|
|
|
|||
|
|
@ -76,12 +76,16 @@ function EgovLoginContent(props) {
|
|||
(resp) => {
|
||||
let resultVO = resp.resultVO;
|
||||
let jToken = resp?.jToken || null;
|
||||
let refreshToken = resp?.refreshToken || null;
|
||||
|
||||
setSessionItem('jToken', jToken);
|
||||
|
||||
// setSessionItem('jToken', jToken);
|
||||
setLocalItem('jToken', jToken);
|
||||
setLocalItem('refreshToken', refreshToken);
|
||||
debugger
|
||||
if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) {
|
||||
setLoginVO(resultVO);
|
||||
setSessionItem('loginUser', resultVO);
|
||||
// setSessionItem('loginUser', resultVO);
|
||||
setLocalItem('loginUser', resultVO);
|
||||
props.onChangeLogin(resultVO);
|
||||
if (saveIDFlag) setLocalItem(KEY_ID, resultVO?.id);
|
||||
navigate(URL.MAIN);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import Row from 'react-bootstrap/Row';
|
|||
import Col from 'react-bootstrap/Col';
|
||||
import Modal from 'react-bootstrap/Modal';
|
||||
import * as EgovNet from 'api/egovFetch';
|
||||
import {getSessionItem} from "../../utils/storage";
|
||||
import {getLocalItem} from "../../utils/storage";
|
||||
import CODE from "../../constants/code";
|
||||
|
||||
function CodeViewer(props) {
|
||||
|
|
@ -29,7 +29,7 @@ function CodeViewer(props) {
|
|||
const [bookMarkModal, setBookMarkModal] = useState();
|
||||
|
||||
|
||||
const sessionUser = getSessionItem('loginUser');
|
||||
const sessionUser = getLocalItem('loginUser');
|
||||
const sessionUserSe = sessionUser?.userSe;
|
||||
|
||||
const handleClose = () => setShow(false);
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ import java.util.UUID;
|
|||
*/
|
||||
//security 관련 제외한 jwt util 클래스
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Component
|
||||
public class EgovJwtTokenUtil implements Serializable{
|
||||
|
||||
|
|
@ -52,8 +53,8 @@ public class EgovJwtTokenUtil implements Serializable{
|
|||
//public static final long JWT_TOKEN_VALIDITY = 24 * 60 * 60; //하루
|
||||
public static final long JWT_ACCESS_TOKEN_VALIDITY = (30); //토큰의 유효시간 설정, 기본 60분 60*60
|
||||
public static final String SECRET_KEY = EgovProperties.getProperty("Globals.jwt.secret");
|
||||
@Autowired
|
||||
private RefreshTokenRepository refreshTokenRepository;
|
||||
|
||||
private final RefreshTokenRepository refreshTokenRepository;
|
||||
|
||||
|
||||
//retrieve username from jwt token
|
||||
|
|
@ -107,9 +108,7 @@ public class EgovJwtTokenUtil implements Serializable{
|
|||
|
||||
@Transactional
|
||||
public String generateRefreshTokenToken(UserInfo loginVO){
|
||||
RefreshToken refreshToken = new RefreshToken();
|
||||
refreshToken.setRefreshToken(UUID.randomUUID().toString());
|
||||
refreshToken.setUserSeq(loginVO.getUserSeq());
|
||||
RefreshToken refreshToken = new RefreshToken(loginVO.getUserSeq(), UUID.randomUUID().toString());
|
||||
refreshTokenRepository.save(refreshToken);
|
||||
return refreshToken.getRefreshToken();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,18 +3,18 @@ package com.dbnt.kcscbackend.config.jwt.redis;
|
|||
import lombok.*;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.redis.core.RedisHash;
|
||||
|
||||
import org.springframework.data.redis.core.index.Indexed;
|
||||
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@RedisHash(value="refreshToken", timeToLive = 60) // *60*24*14
|
||||
public class RefreshToken {
|
||||
|
||||
@Id
|
||||
private String refreshToken;
|
||||
private Integer userSeq;
|
||||
@Indexed
|
||||
private String refreshToken;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,9 @@ package com.dbnt.kcscbackend.config.jwt.redis;
|
|||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Repository
|
||||
public interface RefreshTokenRepository extends CrudRepository<RefreshToken, String> {
|
||||
Optional<RefreshToken> findByRefreshToken(String refreshToken);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.dbnt.kcscbackend.config.security;
|
|||
|
||||
import com.dbnt.kcscbackend.auth.entity.UserInfo;
|
||||
import com.dbnt.kcscbackend.config.jwt.EgovJwtTokenUtil;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.MediaType;
|
||||
|
|
@ -21,10 +22,11 @@ import javax.servlet.http.HttpServletResponse;
|
|||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Configuration
|
||||
public class CustomUrlAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
|
||||
|
||||
private final EgovJwtTokenUtil jwtTokenUtil = new EgovJwtTokenUtil();
|
||||
private final EgovJwtTokenUtil jwtTokenUtil;
|
||||
private RequestCache requestCache = new HttpSessionRequestCache();
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.dbnt.kcscbackend.config.security;
|
|||
import com.dbnt.kcscbackend.config.jwt.EgovJwtTokenUtil;
|
||||
import com.dbnt.kcscbackend.config.jwt.JwtAuthenticationEntryPoint;
|
||||
import com.dbnt.kcscbackend.config.jwt.JwtAuthenticationFilter;
|
||||
import com.dbnt.kcscbackend.config.jwt.redis.RefreshTokenRepository;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -48,6 +49,7 @@ public class SecurityConfig {
|
|||
@Resource(name = "loginService")
|
||||
private UserDetailsService loginService;
|
||||
private final ObjectMapper objectMapper;
|
||||
private final RefreshTokenRepository refreshTokenRepository;
|
||||
|
||||
//Http Methpd : Get 인증예외 List
|
||||
private String[] AUTH_GET_WHITELIST = {
|
||||
|
|
@ -139,7 +141,8 @@ public class SecurityConfig {
|
|||
|
||||
@Bean
|
||||
public JsonAuthenticationFilter jsonUsernamePasswordAuthenticationFilter() {
|
||||
JsonAuthenticationFilter jsonAuthenticationFilter = new JsonAuthenticationFilter(objectMapper, new CustomUrlAuthenticationSuccessHandler(), loginFailureHandler());
|
||||
EgovJwtTokenUtil jwtTokenUtil = new EgovJwtTokenUtil(refreshTokenRepository);
|
||||
JsonAuthenticationFilter jsonAuthenticationFilter = new JsonAuthenticationFilter(objectMapper, new CustomUrlAuthenticationSuccessHandler(jwtTokenUtil), loginFailureHandler());
|
||||
jsonAuthenticationFilter.setAuthenticationManager(authenticationManager());
|
||||
return jsonAuthenticationFilter;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue