1
+ package com .gdsc_teamb .servertoyproject .jwt ;
2
+
3
+ import jakarta .servlet .FilterChain ;
4
+ import jakarta .servlet .ServletException ;
5
+ import jakarta .servlet .ServletRequest ;
6
+ import jakarta .servlet .ServletResponse ;
7
+ import jakarta .servlet .http .HttpServletRequest ;
8
+ import lombok .RequiredArgsConstructor ;
9
+ import org .springframework .security .core .Authentication ;
10
+ import org .springframework .security .core .context .SecurityContextHolder ;
11
+ import org .springframework .util .StringUtils ;
12
+ import org .springframework .web .filter .GenericFilterBean ;
13
+ import java .io .IOException ;
14
+
15
+
16
+ @ RequiredArgsConstructor
17
+ public class JwtAuthenticationFilter extends GenericFilterBean {
18
+
19
+ private final JwtTokenProvider jwtTokenProvider ;
20
+
21
+ @ Override
22
+ public void doFilter (ServletRequest request , ServletResponse response , FilterChain chain ) throws IOException , ServletException {
23
+
24
+ // Request Header 에서 JWT 토큰 추출
25
+ String token = resolveToken ((HttpServletRequest ) request );
26
+
27
+ // validateToken 으로 토큰 유효성 검사
28
+ if (token != null && jwtTokenProvider .validateToken (token )) {
29
+ // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext에 저장
30
+ Authentication authentication = jwtTokenProvider .getAuthentication (token );
31
+ // SecurityContextHolder에 인증 토큰 정보 세팅
32
+ SecurityContextHolder .getContext ().setAuthentication (authentication );
33
+ }
34
+ chain .doFilter (request , response );
35
+ }
36
+
37
+ // Request Header 에서 JWT 엑세스 토큰 정보 추출
38
+ private String resolveToken (HttpServletRequest request ) {
39
+ String bearerToken = request .getHeader ("Authorization" );
40
+ if (StringUtils .hasText (bearerToken ) && bearerToken .startsWith ("Bearer" )) {
41
+ return bearerToken .substring (7 );
42
+ }
43
+ return null ;
44
+ }
45
+ }
0 commit comments