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