Skip to content

Commit da9ad8a

Browse files
authored
[HOTFIX] JwtToken 인증 방식 개선 (#404)
* feat: JWT 인증 필터에서 검증 토큰 처리 로직 개선 및 쿠키 삭제 기능 추가 * feat: JWT 인증 필터에서 검증 토큰 쿠키에 보안 속성 추가 * feat: JWT 인증 필터에서 검증 토큰 처리 로직 개선 * feat: JWT 인증 필터에서 검증 토큰 처리 로직 간소화 * feat: JWT 인증 필터에서 액세스 토큰 및 검증 토큰 처리 로직 개선
1 parent dea0d8b commit da9ad8a

3 files changed

Lines changed: 28 additions & 11 deletions

File tree

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

Lines changed: 11 additions & 10 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;
@@ -51,6 +49,9 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
5149
if (jwtTokenProvider.validateToken(accessToken)) {
5250
Authentication auth = jwtTokenProvider.getAuthenticationByToken(accessToken);
5351
SecurityContextHolder.getContext().setAuthentication(auth);
52+
53+
chain.doFilter(request, response);
54+
return;
5455
} else {
5556
clearAuthCookie(response, "accessToken");
5657
SecurityContextHolder.clearContext();
@@ -64,15 +65,15 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
6465
jwtTokenProvider.resolveVerificationToken(request);
6566

6667
if (verificationToken != null) {
67-
if (!jwtTokenProvider.validateToken(verificationToken)) {
68-
// verification token은 실패 시 에러가 맞음
69-
throw new AuthException(AuthErrorCode.INVALID_TOKEN);
70-
}
68+
if (jwtTokenProvider.validateToken(verificationToken)) {
69+
String email = jwtTokenProvider.extractEmailFromVerificationToken(verificationToken);
7170

72-
String email = jwtTokenProvider.extractEmailFromVerificationToken(verificationToken);
73-
74-
Authentication auth = createVerificationAuthentication(email);
75-
SecurityContextHolder.getContext().setAuthentication(auth);
71+
Authentication auth = createVerificationAuthentication(email);
72+
SecurityContextHolder.getContext().setAuthentication(auth);
73+
} else {
74+
clearAuthCookie(response, "verificationToken");
75+
SecurityContextHolder.clearContext();
76+
}
7677
}
7778

7879
chain.doFilter(request, response);

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)