From e608cc0a6ba007696348838914505d736d618929 Mon Sep 17 00:00:00 2001 From: dongHyo Date: Tue, 31 May 2022 20:00:51 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20JwtFilter=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/global/jwt/JwtFilter.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 server/src/main/java/com/ticketing/server/global/jwt/JwtFilter.java diff --git a/server/src/main/java/com/ticketing/server/global/jwt/JwtFilter.java b/server/src/main/java/com/ticketing/server/global/jwt/JwtFilter.java new file mode 100644 index 0000000..7f62c9e --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/jwt/JwtFilter.java @@ -0,0 +1,51 @@ +package com.ticketing.server.global.jwt; + +import java.io.IOException; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +@Slf4j +@Configuration +public class JwtFilter extends OncePerRequestFilter { + + private final JwtProvider tokenProvider; + private final String accessHeader; + private final String tokenPrefix; + + public JwtFilter(JwtProperties jwtProperties, JwtProvider tokenProvider) { + this.accessHeader = jwtProperties.getAccessHeader(); + this.tokenPrefix = jwtProperties.getPrefix(); + this.tokenProvider = tokenProvider; + } + + @Override + public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { + String jwt = resolveToken(request); + + // 토큰이 정상이면 Authentication 을 가져와서 SecurityContext 에 저장 + if (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) { + Authentication authentication = tokenProvider.getAuthentication(jwt); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + chain.doFilter(request, response); + } + + private String resolveToken(HttpServletRequest request) { + String bearerToken = request.getHeader(accessHeader); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(tokenPrefix)) { + return bearerToken.substring(7); + } + + return null; + } + +}