TIL:) Springboot + security + jwt 로그아웃

⭐알게 된 점⭐

로그인을 할 때 AccessToken과 refreshToken을 같이 발급받아

AccessToken은 Header에 추가를 해주고 refreshToken은 redis에 저장해둔다.

로그아웃 할 때, redis에 사용자의 refreshToken이 있는지 조회한 후

refreshToken이 존재할 경우 radis에서 해당 token을 삭제한 후

logout을 붙여 다시 redis저장해준다  (블랙리스트 등록)

public String logout(HttpServletRequest request, User user) {

		String accessToken = jwtUtil.getJwtFromHeader(request);

		if(!jwtUtil.validateToken(accessToken)){
			throw new IllegalArgumentException("유효하지 않은 토큰입니다");
		}

		if(redisTemplate.opsForValue().get("RT:"+user.getUserId())!=null){
			redisTemplate.delete("RT:"+user.getUserId());
		}
		Claims info = jwtUtil.getUserInfoFromToken(accessToken);
		Long expiration = info.getExpiration().getTime();
		redisTemplate.opsForValue().set(accessToken,"logout",expiration, TimeUnit.MICROSECONDS);
		return "로그아웃 성공";
	}

🐰 END

꼬박 하루가 걸려서 완성해 아직 미흡한 부분도 있지만

스스로 해내서 뿌듯하다!

BELATED ARTICLES

more