Skip to content

Commit afd2055

Browse files
committed
feat: 쿠키에서 토큰 추출 로직
1 parent 28f0530 commit afd2055

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

src/main/java/com/example/log4u/common/oauth2/jwt/JwtAuthenticationFilter.java

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.security.core.Authentication;
99
import org.springframework.security.core.context.SecurityContextHolder;
1010
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
11+
import org.springframework.stereotype.Component;
1112
import org.springframework.web.filter.OncePerRequestFilter;
1213

1314
import com.example.log4u.common.oauth2.dto.CustomOAuth2User;
@@ -18,38 +19,66 @@
1819
import io.jsonwebtoken.ExpiredJwtException;
1920
import jakarta.servlet.FilterChain;
2021
import jakarta.servlet.ServletException;
22+
import jakarta.servlet.http.Cookie;
2123
import jakarta.servlet.http.HttpServletRequest;
2224
import jakarta.servlet.http.HttpServletResponse;
25+
import lombok.NonNull;
2326
import lombok.RequiredArgsConstructor;
27+
import lombok.extern.slf4j.Slf4j;
2428

2529
@RequiredArgsConstructor
30+
@Slf4j
2631
public class JwtAuthenticationFilter extends OncePerRequestFilter {
2732
private final JwtUtil jwtUtil;
28-
2933
private final UserService userService;
3034

31-
@Value("${jwt.access-token-expiration-time-seconds}")
35+
@Value("${jwt.access-token-expire-time-seconds}")
3236
private long accessTokenValiditySeconds;
3337

34-
@Value("${jwt.refresh-token-expiration-time-seconds}")
38+
@Value("${jwt.refresh-token-expire-time-seconds}")
3539
private long refreshTokenValiditySeconds;
3640

3741
@Override
38-
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
39-
FilterChain filterChain) throws ServletException, IOException {
42+
protected void doFilterInternal(
43+
HttpServletRequest request,
44+
@NonNull HttpServletResponse response,
45+
@NonNull FilterChain filterChain
46+
) throws ServletException, IOException {
47+
String requestUri = request.getRequestURI();
48+
if (requestUri.matches("^\\/login(?:\\/.*)?$")) {
49+
filterChain.doFilter(request, response);
50+
return;
51+
}
52+
if (requestUri.matches("^\\/oauth2(?:\\/.*)?$")) {
53+
filterChain.doFilter(request, response);
54+
return;
55+
}
4056

41-
// 헤더에서 access키에 담긴 토큰 추출
42-
String accessToken = request.getHeader("access");
57+
// 쿠키에서 access키에 담긴 토큰 추출
58+
String accessToken = null;
59+
Cookie[] cookies = request.getCookies();
60+
for (Cookie cookie : cookies){
61+
if (cookie.getName().equals("access")) {
62+
accessToken = cookie.getValue();
63+
}
64+
}
4365

4466
// 토큰이 없다면 다음 필터로 넘겨서 발급 받아야함
4567
if (accessToken == null) {
4668
filterChain.doFilter(request, response);
4769
return;
4870
}
4971

72+
log.info("필터에서 추출한 access: " + accessToken + "\n");
73+
74+
5075
// 토큰 만료 확인, 만료 시 다음 필터로 넘기지 않음(재발급 필요)
5176
try {
77+
System.out.println("만료확인");
5278
jwtUtil.isExpired(accessToken);
79+
System.out.println("category : " + jwtUtil.getCategory(accessToken));
80+
System.out.println("userId : " + jwtUtil.getUserId(accessToken));
81+
System.out.println("role : " + jwtUtil.getRole(accessToken));
5382
} catch (ExpiredJwtException e) {
5483
PrintWriter writer = response.getWriter();
5584
writer.print("토큰이 만료되었습니다.");
@@ -68,10 +97,13 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
6897
return;
6998
}
7099

100+
71101
// userId, role
72102
Long userId = jwtUtil.getUserId(accessToken);
73103

74104
CustomOAuth2User customOAuth2User = new CustomOAuth2User(userService.getUserById(userId));
105+
log.info("필터에서 추출한 userId: " + userId);
106+
log.info("생성된 CustomOAuth2User ID: " + customOAuth2User.getUserId());
75107

76108
// security context holder 에 추가해줌
77109
Authentication oAuth2Token = new UsernamePasswordAuthenticationToken(

0 commit comments

Comments
 (0)