Compare commits
2 Commits
refactor/L
...
feature/lo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b3c68ee43 | ||
|
|
01db29c208 |
@@ -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) {
|
||||
LogoutResponse logoutResponse = authenticationService.deleteRefreshToken(userRequest.getUsername());
|
||||
|
||||
return ResponseEntity.status(HttpStatus.OK)
|
||||
.body(logoutResponse);
|
||||
}
|
||||
|
||||
private HttpHeaders getHttpHeaders() {
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
httpHeaders.set(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, must-revalidate");
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.ticketing.server.user.application.response;
|
||||
|
||||
import com.ticketing.server.global.redis.RefreshToken;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class LogoutResponse {
|
||||
|
||||
private Long refreshTokenId;
|
||||
private String email;
|
||||
private String refreshToken;
|
||||
|
||||
private LogoutResponse(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public static LogoutResponse from(String email) {
|
||||
return new LogoutResponse(email);
|
||||
}
|
||||
|
||||
public static LogoutResponse from(RefreshToken refreshToken) {
|
||||
return new LogoutResponse(refreshToken.getId(), refreshToken.getEmail(), refreshToken.getToken());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.ticketing.server.global.redis.RefreshRedisRepository;
|
||||
import com.ticketing.server.global.redis.RefreshToken;
|
||||
import com.ticketing.server.global.security.jwt.JwtProperties;
|
||||
import com.ticketing.server.global.security.jwt.JwtProvider;
|
||||
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;
|
||||
@@ -79,6 +80,16 @@ public class AuthenticationServiceImpl implements AuthenticationService {
|
||||
return tokenDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public LogoutResponse deleteRefreshToken(String email) {
|
||||
return refreshRedisRepository.findByEmail(email)
|
||||
.map(tokenDto -> {
|
||||
refreshRedisRepository.delete(tokenDto);
|
||||
return LogoutResponse.from(tokenDto);
|
||||
}).orElseGet(() -> LogoutResponse.from(email));
|
||||
}
|
||||
|
||||
private String resolveToken(String bearerToken) {
|
||||
if (StringUtils.hasText(bearerToken) && jwtProperties.hasTokenStartsWith(bearerToken)) {
|
||||
return bearerToken.substring(7);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ticketing.server.user.service.interfaces;
|
||||
|
||||
import com.ticketing.server.user.application.response.LogoutResponse;
|
||||
import com.ticketing.server.user.application.response.TokenDto;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
|
||||
@@ -9,4 +10,6 @@ public interface AuthenticationService {
|
||||
|
||||
TokenDto reissueTokenDto(String bearerRefreshToken);
|
||||
|
||||
LogoutResponse deleteRefreshToken(String email);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user