blues_log
Published 2023. 8. 21. 21:13
2023-08-21 TIL TIL&WIL

오늘 학습한 내용

  • 최종 프로젝트 (리프레시 토큰 적용, 로그아웃 기능)

작성한 코드는 다음과 같다.

 

    /**
     * 1. 전달받은 유저의 아이디로 유저가 존재하는지 확인
     * 2. RefreshToken이 유효한지 체크
     * 3. AccessToken을 발급한 뒤 쿠키에 추가
    */
    @Override
    @Transactional
    public TokenResponseDto requestRefreshToken(HttpServletResponse res, HttpServletRequest req) {
        String req2 = jwtUtil.getTokenFromRequest(req);
        log.info(req2);
        RefreshToken refreshToken = refreshTokenRepository.findByAccessToken(req2).orElseThrow(() -> new IllegalArgumentException("Token not found"));

        String validateToken = jwtUtil.substringToken(refreshToken.getTokenValue());
        if (!jwtUtil.validateRefreshToken(validateToken)) {
            throw new IllegalArgumentException("로그인을 새로 해주세요.");
        };

        // 현재 쿠키 삭제
        jwtUtil.deleteCookie(jwtUtil.getTokenFromRequest(req), res);

        Claims claims = jwtUtil.getUserInfoFromRefreshToken(validateToken);
        String token = jwtUtil.createAccessToken(claims.getSubject(), (RoleEnum) claims.get("AUTHORIZATION_KEY"));
        refreshToken.update(token);

        jwtUtil.addJwtToCookie(token, res);
        return new TokenResponseDto(refreshToken.getTokenValue(), token);
    }

 

처음에는 @AuthenticationPrincipal 을 사용해서 user의 정보를 가져왔는데 생각해보니 만료가 된 상태에서는 정보를 가져올 수 없었다.

 

또한 필터에서 계속 만료된 토큰이 걸려서 이를 해결하기 위해 우선 만료가 된 상황이면

req.getRequestDispatcher("/api/user/refresh-token").forward(req, res);

이렇게 컨트롤러를 호출하도록 했다.

 


사실 내가 작성한 코드가 맞는지는 잘 모르겠지만.. 우선 토큰이 잘 발급되고, 우선 기능이 돌아가니까 다른 기능을 더 우선적으로 구현하고 점점 수정해야겠다.

'TIL&WIL' 카테고리의 다른 글

2023-08-23 TIL  (0) 2023.08.23
2023-08-22 TIL  (0) 2023.08.22
2023-08-17 TIL  (0) 2023.08.17
2023-08-14 TIL (심화 프로젝트 KPT 회고)  (0) 2023.08.14
2023-08-09 TIL  (0) 2023.08.09