feat: 로그아웃 시 refreshToken 제거

This commit is contained in:
dongHyo
2022-06-28 20:32:26 +09:00
parent ab32f435b1
commit 01db29c208
4 changed files with 44 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
package com.ticketing.server.user.application;
import com.ticketing.server.user.application.request.LoginRequest;
import com.ticketing.server.user.application.response.LogoutResponse;
import com.ticketing.server.user.application.response.TokenDto;
import com.ticketing.server.user.service.interfaces.AuthenticationService;
import lombok.RequiredArgsConstructor;
@@ -8,6 +9,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -40,6 +43,14 @@ public class AuthController {
.body(tokenDto);
}
@PostMapping("/logout")
public ResponseEntity<LogoutResponse> logout(@AuthenticationPrincipal UserDetails userRequest) {
authenticationService.deleteRefreshToken(userRequest.getUsername());
return ResponseEntity.status(HttpStatus.OK)
.body(LogoutResponse.from(userRequest.getUsername()));
}
private HttpHeaders getHttpHeaders() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, must-revalidate");

View File

@@ -0,0 +1,17 @@
package com.ticketing.server.user.application.response;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class LogoutResponse {
private String email;
public static LogoutResponse from(String email) {
return new LogoutResponse(email);
}
}

View File

@@ -11,6 +11,7 @@ import com.ticketing.server.global.security.jwt.JwtProperties;
import com.ticketing.server.global.security.jwt.JwtProvider;
import com.ticketing.server.user.application.response.TokenDto;
import com.ticketing.server.user.service.interfaces.AuthenticationService;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
@@ -79,6 +80,19 @@ public class AuthenticationServiceImpl implements AuthenticationService {
return tokenDto;
}
@Override
@Transactional
public boolean deleteRefreshToken(String email) {
Optional<RefreshToken> findTokenEntity = refreshRedisRepository.findByEmail(email);
if (findTokenEntity.isPresent()) {
refreshRedisRepository.delete(findTokenEntity.get());
return true;
}
return false;
}
private String resolveToken(String bearerToken) {
if (StringUtils.hasText(bearerToken) && jwtProperties.hasTokenStartsWith(bearerToken)) {
return bearerToken.substring(7);

View File

@@ -9,4 +9,6 @@ public interface AuthenticationService {
TokenDto reissueTokenDto(String bearerRefreshToken);
boolean deleteRefreshToken(String email);
}