기타/개발일기
[Spring Security] JWT 특성을 이용한 인증 처리 리팩토링
hu6r1s
2024. 3. 21. 20:29
JWT의 특성
JWT의 특성은 stateless, 즉 무상태성이다.
JWT는 HTTP 통신을 통해 주고받기 때문에 기본적으로 HTTP의 특성을 가지게 된다.
무상태성은 서버가 클라이언트의 상태를 가지고 있지 않는 것을 말한다.
인증 처리 리팩토링
리팩토링을 하게 된 계기는, 로그인한 유저가 로그인 인증 처리를 할 때, Database를 걸쳐 나오는 것 때문에, 이를 수정하고자 했다.
// 인증 처리
public void setAuthentication(String username) {
SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication = createAuthentication(username);
context.setAuthentication(authentication);
SecurityContextHolder.setContext(context);
}
// 인증 객체 생성
private Authentication createAuthentication(String username) {
UserDetails userDetails = new UserDetailsImpl(username);
return new UsernamePasswordAuthenticationToken(userDetails, null, null);
}
인증 객체를 생성할 때, loadUserByUsername을 통해서 UserDetails를 만들어 객체를 생성하면, 필터를 통해 모든 API 요청시 계속 DB를 건드리게 되었다. 건드리지 않기 위해, username만을 가지는 User를 생성하도록 하여 인증 객체를 생성하였다.
더 좋은 방법이 있겠지만, 지금은 이렇게 구현하였다.
전공이 보안이다보니 Spring Security에 대해서 조금 더 깊게 파보고 싶어졌다. 추후에 파보고 포스팅해야지.