Skip to content

Commit 1fa4e98

Browse files
authored
Merge pull request #401 from JECT-Study/feat/343-feat-jwtexceptionhandlerfilter
feat: JWT 인증 필터에서 검증 토큰 처리 로직 개선 및 쿠키 삭제 기능 추가
2 parents dcba09e + d689717 commit 1fa4e98

3 files changed

Lines changed: 25 additions & 6 deletions

File tree

src/main/java/org/ject/support/common/security/jwt/JwtAuthenticationFilter.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import org.ject.support.common.exception.GlobalErrorCode;
1010
import org.ject.support.common.exception.GlobalException;
1111
import org.ject.support.common.security.CustomUserDetails;
12-
import org.ject.support.domain.auth.exception.AuthErrorCode;
13-
import org.ject.support.domain.auth.exception.AuthException;
1412
import org.ject.support.domain.member.Role;
1513
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1614
import org.springframework.security.core.Authentication;
@@ -64,9 +62,14 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
6462
jwtTokenProvider.resolveVerificationToken(request);
6563

6664
if (verificationToken != null) {
67-
if (!jwtTokenProvider.validateToken(verificationToken)) {
68-
// verification token은 실패 시 에러가 맞음
69-
throw new AuthException(AuthErrorCode.INVALID_TOKEN);
65+
if (jwtTokenProvider.validateToken(verificationToken)) {
66+
// 토큰이 유효한 경우, 인증 정보를 SecurityContext에 설정
67+
Authentication auth = jwtTokenProvider.getAuthenticationByToken(accessToken);
68+
SecurityContextHolder.getContext().setAuthentication(auth);
69+
} else {
70+
clearAuthCookie(response, "Authentication auth = jwtTokenProvider.getAuthenticationByToken(accessToken);\n" +
71+
" SecurityContextHolder.getContext().setAuthentication(auth);");
72+
SecurityContextHolder.clearContext();
7073
}
7174

7275
String email = jwtTokenProvider.extractEmailFromVerificationToken(verificationToken);

src/main/java/org/ject/support/common/security/jwt/JwtTokenProvider.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import jakarta.annotation.PostConstruct;
1111
import jakarta.servlet.http.Cookie;
1212
import jakarta.servlet.http.HttpServletRequest;
13+
import jakarta.servlet.http.HttpServletResponse;
1314
import lombok.Getter;
1415
import lombok.RequiredArgsConstructor;
1516
import org.ject.support.common.exception.GlobalException;
@@ -205,7 +206,19 @@ public String createVerificationToken(String email) {
205206
.signWith(secretKey)
206207
.compact();
207208
}
208-
209+
210+
/**
211+
* 인증번호 검증 쿠키 삭제
212+
*/
213+
public void deleteVerificationCookie(HttpServletResponse response) {
214+
Cookie cookie = new Cookie("verificationToken", null);
215+
cookie.setPath("/");
216+
cookie.setHttpOnly(true);
217+
cookie.setSecure(true);
218+
cookie.setMaxAge(0);
219+
response.addCookie(cookie);
220+
}
221+
209222
/**
210223
* 인증번호 검증 토큰에서 이메일 추출
211224
*/

src/main/java/org/ject/support/domain/member/controller/MemberController.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ public boolean registerTempMember(HttpServletRequest request, HttpServletRespons
5050
Authentication authentication = memberService.registerTempMember(registerRequest, email);
5151
customSuccessHandler.onAuthenticationSuccess(request, response, authentication);
5252

53+
// verification 토큰은 더 이상 필요 없으므로 삭제
54+
jwtTokenProvider.deleteVerificationCookie(response);
55+
5356
return true;
5457
}
5558

0 commit comments

Comments
 (0)