AuthController
/**
* 로그아웃
* 1. Redis내의 refresh_token 삭제
* 2. Redis에 현재 access_token을 logout 상태로 등록
* - 2.1. 해당 access_token의 남은 유효시간을 Redis의 TTL로 등록
* 3. JwtTokenFilter 파일의 doFIlterInternal 메소드에서 redis에 logout 상태인지 검증하는 로직 추가
* */
@DeleteMapping("/api/v1/auth/logout")
public ResponseEntity<?> logout(@RequestBody LogoutRequest request) {
authService.logout(request);
return ResponseEntity.status(HttpStatus.OK).body("User logout!");
}
AuthServiceImpl
public void logout(LogoutRequest request) {
String email = request.getEmail();
String accessToken = request.getAccessToken();
// Redis 내의 기존 refreshToken 삭제
if (!refreshTokenRepository.existsById(email)){
// 리프레시 토큰 없다고 예외처리 날려야됨
}
refreshTokenRepository.deleteById(email);
// access_token의 남은 유효시간 가져오기 (Seconds 단위)
Date expirationFromToken = jwtTokenProvider.getExpirationFromToken(accessToken);
Date today = new Date();
Integer sec = (int) ((expirationFromToken.getTime() - today.getTime()) / 1000);
// access_token을 Redis의 key 값으로 등록
logoutRepository.save(
Logout.builder()
.id(accessToken)
.data("logout")
.expiration(sec)
.build()
);
}
JwtTokenFIlter
// Logout 추가 이후
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException, ServletException, IOException {
String accessToken = getTokenFromRequest(request);
if (accessToken != null && jwtTokenProvider.validateToken(accessToken)) {
if (logoutRepository.existsById(accessToken)) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write("This token is logged out");
return;
}
UsernamePasswordAuthenticationToken authentication = getAuthenticationFromToken(accessToken);
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
filterChain.doFilter(request, response);
}
분명 정상적으로 작동해야되는데 ...... 해야되는데 . . .. . 왜 ...
Parameter org.springframework.data.mapping.Parameter@efda9bae does not have a name
?????? ?? ? ? ? ?
Preferences -> Build, Execution, Deployment -> Compiler -> Java Compiler
'-parameters' 추가
→ 정상 작동?? 왜??
+ 하고 안될 경우 module 하위의 out 폴더 삭제 후 다시 실행
그..렇구나.. ㅠ
'오류' 카테고리의 다른 글
[Postman] Invisible Character 오류 (0) | 2024.09.04 |
---|---|
[오류 정리] (0) | 2024.08.30 |
[Springboot] mysql List, null 에러 @Builder.Default (0) | 2023.08.25 |
[Swagger] Failed to fetch (http → https) (0) | 2023.08.17 |
[SpringBoot] gson 추가 후 오류 + 해결 (0) | 2023.08.16 |