1+ package hackathon .soa .common ;
2+
3+ import hackathon .soa .common .securitry .CustomUserDetailsService ;
4+ import jakarta .servlet .FilterChain ;
5+ import jakarta .servlet .ServletException ;
6+ import jakarta .servlet .http .HttpServletRequest ;
7+ import jakarta .servlet .http .HttpServletResponse ;
8+ import lombok .RequiredArgsConstructor ;
9+ import lombok .extern .slf4j .Slf4j ;
10+ import org .springframework .security .authentication .UsernamePasswordAuthenticationToken ;
11+ import org .springframework .security .core .context .SecurityContextHolder ;
12+ import org .springframework .security .core .userdetails .UserDetails ;
13+ import org .springframework .security .web .authentication .WebAuthenticationDetailsSource ;
14+ import org .springframework .stereotype .Component ;
15+ import org .springframework .web .filter .OncePerRequestFilter ;
16+
17+ import java .io .IOException ;
18+
19+ @ Slf4j
20+ @ Component
21+ @ RequiredArgsConstructor
22+ public class JwtAuthenticationFilter extends OncePerRequestFilter {
23+
24+ private final JwtUtil jwtUtil ;
25+ private final CustomUserDetailsService userDetailsService ;
26+
27+ @ Override
28+ protected void doFilterInternal (HttpServletRequest request , HttpServletResponse response , FilterChain filterChain )
29+ throws ServletException , IOException {
30+
31+ String authorizationHeader = request .getHeader ("Authorization" );
32+ String token = jwtUtil .resolveToken (authorizationHeader );
33+
34+ if (token != null && jwtUtil .validateToken (token )) {
35+ try {
36+ Long memberId = jwtUtil .getMemberIdFromToken (token );
37+ UserDetails userDetails = userDetailsService .loadUserByUsername (memberId .toString ());
38+
39+ UsernamePasswordAuthenticationToken authToken =
40+ new UsernamePasswordAuthenticationToken (userDetails , null , userDetails .getAuthorities ());
41+ authToken .setDetails (new WebAuthenticationDetailsSource ().buildDetails (request ));
42+
43+ SecurityContextHolder .getContext ().setAuthentication (authToken );
44+
45+ } catch (Exception e ) {
46+ log .error ("JWT 인증 처리 중 오류 발생: {}" , e .getMessage ());
47+ }
48+ }
49+
50+ filterChain .doFilter (request , response );
51+ }
52+ }
0 commit comments