Skip to content

Commit f6bea6c

Browse files
committed
feat: Add JwtAuthenticationFilter (#3)
1 parent aceda13 commit f6bea6c

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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

Comments
 (0)