Skip to content

Commit d884fec

Browse files
committed
fix: Security 설정, JWT 필터 이전 설정 적용 (#4)
1 parent 0588366 commit d884fec

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

src/main/java/com/project/mapdagu/config/SecurityConfig.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,8 @@ public SecurityFilterChain filterChain(HttpSecurity http, HandlerMappingIntrospe
6666
.requestMatchers(mvcMatcherBuilder.pattern("/images/**")).permitAll()
6767
.requestMatchers(mvcMatcherBuilder.pattern("/index.html")).permitAll()
6868
.anyRequest().authenticated())
69-
.oauth2Login(oauth2Login -> oauth2Login
70-
// successHandler(oAuth2LoginSuccessHandler)
71-
// .failureHandler(oAuth2LoginFailureHandler)
69+
.oauth2Login(oauth2Login -> oauth2Login.successHandler(oAuth2LoginSuccessHandler)
70+
.failureHandler(oAuth2LoginFailureHandler)
7271
.userInfoEndpoint(userInfoEndPoint -> userInfoEndPoint.userService(customOauth2UserService)))
7372
.addFilterAfter(customJsonUsernamePasswordAuthenticationFilter(), LogoutFilter.class)
7473
.addFilterBefore(jwtAuthenticationProcessingFilter(), CustomJsonAuthenticationFilter.class);

src/main/java/com/project/mapdagu/domain/oauth2/handler/OAuth2LoginFailureHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ public class OAuth2LoginFailureHandler implements AuthenticationFailureHandler {
1717
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws ServletException, IOException {
1818
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
1919
response.getWriter().write("소셜 로그인 실패! 서버 로그를 확인해주세요.");
20-
log.info("소셜 로그인에 실패했습니다. 에러 메시지 : {}", exception.getMessage());
20+
log.info("소셜 로그인에 실패했습니다. 에러 메시지 : {}", exception.fillInStackTrace());
2121
}
2222
}

src/main/java/com/project/mapdagu/jwt/filter/JwtAuthenticationProcessingFilter.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,29 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
4747
}
4848

4949
log.info("JwtAuthenticationProcessingFilter 호출");
50-
String accessToken = jwtService.extractAccessToken(request).orElse(null);
50+
// 사용자 요청 헤더에서 RefreshToken 추출-> RefreshToken이 없거나 유효하지 않다면 null
51+
String refreshToken = jwtService.extractRefreshToken(request)
52+
.filter(jwtService::isTokenValid)
53+
.orElse(null);
54+
55+
// 리프레시 토큰이 요청 헤더에 존재하고 유효하다면, AccessToken이 만료된 것 -> AccessToken 재발급
56+
if (refreshToken != null) {
57+
String email = jwtService.extractEmail(refreshToken).orElseThrow(() -> new TokenException(ErrorCode.INVALID_TOKEN));
58+
if (isRefreshTokenMatch(email, refreshToken)) {
59+
String newAccessToken = jwtService.createAccessToken(email);
60+
String newRefreshToken = jwtService.createRefreshToken(email);
61+
jwtService.updateRefreshToken(email, newRefreshToken);
62+
jwtService.sendAccessAndRefreshToken(response, newAccessToken, refreshToken);
63+
}
64+
return;
65+
}
5166

52-
if (jwtService.isTokenValid(accessToken)) {
53-
jwtService.extractEmail(accessToken)
54-
.ifPresent(email -> memberRepository.findByEmail(email)
55-
.ifPresent(this::saveAuthentication));
67+
// AccessToken을 검사하고 인증 처리
68+
// AccessToken이 없거나 유효하지 않다면, 인증 객체가 담기지 않은 상태로 다음 필터로 넘어가기 때문에 403 에러 발생
69+
// AccessToken이 유효하다면, 인증 객체가 담긴 상태로 다음 필터로 넘어가기 때문에 인증 성공
70+
else {
71+
checkAccessTokenAndAuthentication(request, response, filterChain);
5672
}
57-
filterChain.doFilter(request, response);
5873
}
5974

6075
public boolean isRefreshTokenMatch(String email, String refreshToken) {

0 commit comments

Comments
 (0)