이번 프로젝트에서 특이했던 점은 JWT(Json Web Token)을 사용해서 여러 인증을 수행한다는 점이다.
위와 같은 방식이다.
코드는 다음과 같다.
@Transactional
public MemoResponseDto createMemo(MemoRequestDto requestDto, HttpServletRequest request) {
String token = jwtUtil.resolveToken(request);
//(1), token을 가져온다
Claims claims;
if (token != null){
if (jwtUtil.validateToken(token)){
claims = jwtUtil.getUserInfoFromToken(token);
} else {
throw new IllegalArgumentException("토큰 에러");
}
//(2), token이 claims의 token과 같다면 통과
User user = userRepository.findByUsername(claims.getSubject()).orElseThrow(
() -> new IllegalArgumentException("사용자가 존재하지 않습니다")
);
Memo memo = memoRepository.saveAndFlush(new Memo(requestDto, user));
return new MemoResponseDto(memo);
} else {
return null;
}
토큰을 가져오는 부분.