코드 리뷰 목록
Java🤖 AI 리뷰 완료

Spring Security JWT 필터 구현

Spring Security에서 JWT 토큰을 검증하는 커스텀 필터를 구현했습니다. OncePerRequestFilter를 상속받아 매 요청마다 토큰을 검증합니다.

K
kim_dev
2025-03-20
3

// 코드

Java
33 lines
1public class JwtAuthenticationFilter extends OncePerRequestFilter {
2
3    private final JwtTokenProvider tokenProvider;
4    private final UserDetailsService userDetailsService;
5
6    @Override
7    protected void doFilterInternal(
8        HttpServletRequest request,
9        HttpServletResponse response,
10        FilterChain filterChain
11    ) throws ServletException, IOException {
12        String token = resolveToken(request);
13
14        if (token != null && tokenProvider.validateToken(token)) {
15            String username = tokenProvider.getUsername(token);
16            UserDetails userDetails = userDetailsService.loadUserByUsername(username);
17            Authentication auth = new UsernamePasswordAuthenticationToken(
18                userDetails, null, userDetails.getAuthorities()
19            );
20            SecurityContextHolder.getContext().setAuthentication(auth);
21        }
22
23        filterChain.doFilter(request, response);
24    }
25
26    private String resolveToken(HttpServletRequest request) {
27        String bearerToken = request.getHeader("Authorization");
28        if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
29            return bearerToken.substring(7);
30        }
31        return null;
32    }
33}
🤖
AI 코드 리뷰
2025-03-20
자동 분석

`filterChain.doFilter(request, response)` 호출 전에 예외 처리를 추가하는 것이 좋습니다. `ExpiredJwtException`이 발생할 경우 401 응답을 명시적으로 반환해야 합니다. 현재 코드는 예외가 그대로 전파될 수 있습니다.

// 커뮤니티 리뷰2

C
choi_java
2025-03-20
5

AI 리뷰에 동의합니다. 추가로 `SecurityContextHolder.clearContext()`를 finally 블록에서 호출하여 스레드 로컬 메모리 누수를 방지하는 것을 권장합니다.

P
park_spring
2025-03-21
3

tokenProvider.validateToken() 내부에서 이미 예외를 처리하나요? 만약 그렇다면 이중 처리가 될 수 있습니다. 전체 흐름을 확인해보세요.

// 리뷰 작성