Skip to content

Commit

Permalink
refactor : PR 리뷰 후 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
GaBaljaintheroom committed Jun 15, 2024
1 parent 708cb42 commit ff5a191
Show file tree
Hide file tree
Showing 15 changed files with 34 additions and 60 deletions.
2 changes: 2 additions & 0 deletions app/api/common-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ bootJar.enabled = false
jar.enabled = true

dependencies {
implementation project(":app:domain:user-domain")

// spring-security
implementation 'org.springframework.boot:spring-boot-starter-security'

Expand Down
14 changes: 11 additions & 3 deletions app/api/common-api/src/main/java/org/example/filter/JWTFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,15 @@
import java.io.IOException;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.example.exception.BusinessException;
import org.example.repository.TokenRepository;
import org.example.security.dto.AuthenticatedUser;
import org.example.security.dto.TokenParam;
import org.example.security.dto.UserParam;
import org.example.security.token.JWTGenerator;
import org.example.security.token.JWTHandler;
import org.example.security.token.RefreshTokenProcessor;
import org.example.security.vo.TokenError;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
Expand All @@ -27,6 +30,7 @@ public class JWTFilter extends OncePerRequestFilter {
private final JWTHandler jwtHandler;
private final JWTGenerator jwtGenerator;
private final RefreshTokenProcessor refreshTokenProcessor;
private final TokenRepository tokenRepository;

@Override
protected void doFilterInternal(
Expand All @@ -50,12 +54,16 @@ protected void doFilterInternal(
private void handleAccessToken(HttpServletRequest request) {
String accessToken = jwtHandler.extractAccessToken(request);
UserParam userParam = jwtHandler.extractUserFrom(accessToken);

jwtGenerator.verifyLogoutAccessToken(userParam);

verifyLogoutAccessToken(userParam);
saveOnSecurityContextHolder(userParam);
}

public void verifyLogoutAccessToken(UserParam userParam) {
if (tokenRepository.existAccessToken(userParam.userId().toString())) {
throw new BusinessException(TokenError.INVALID_TOKEN);
}
}

private void saveOnSecurityContextHolder(UserParam userParam) {
AuthenticatedUser authenticatedUser = AuthenticatedUser.builder()
.userId(userParam.userId())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public interface TokenRepository {

void save(String userId, String refreshToken);

Optional<String> getOldRefreshToken(String userId);
Optional<String> getExistRefreshToken(String userId);

Boolean existAccessToken(String userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,9 @@ private String createRefreshToken(UserParam userParam, Date from) {
.compact();
}

public String getOldRefreshToken(UserParam userParam) {
return tokenRepository.getOldRefreshToken(userParam.userId().toString())
public String getExistRefreshToken(UserParam userParam) {
return tokenRepository.getExistRefreshToken(userParam.userId().toString())
.orElseThrow(() -> new BusinessException(TokenError.WRONG_HEADER));
}

public void verifyLogoutAccessToken(UserParam userParam) {
if (tokenRepository.existAccessToken(userParam.userId().toString())) {
throw new BusinessException(TokenError.INVALID_TOKEN);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public TokenParam reissueToken(HttpServletRequest request) {
String refreshToken = jwtHandler.extractRefreshToken(request);
UserParam userParam = jwtHandler.extractUserFrom(refreshToken);

String oldRefreshToken = jwtGenerator.getOldRefreshToken(userParam);
String oldRefreshToken = jwtGenerator.getExistRefreshToken(userParam);
if (!refreshToken.equals(oldRefreshToken)) {
throw new BusinessException(TokenError.INVALID_TOKEN);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.example.vo;

import lombok.Getter;
import org.example.entity.User;

@Getter
public enum UserRoleApiType {
Expand All @@ -13,4 +14,8 @@ public enum UserRoleApiType {
UserRoleApiType(String authority) {
this.authority = authority;
}

public static UserRoleApiType from(User user) {
return UserRoleApiType.valueOf(user.getUserRole().name());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ public class UserController {
@Tag(name = "user")
@Operation(summary = "유저 로그인", description = "사용자는 소셜 로그인을 할 수 있다.")
public ResponseEntity<TokenParam> signUp(@Valid @RequestBody LoginApiRequest request) {
final LoginServiceRequest loginServiceRequest = request.toLoginApiDto()
.toLoginServiceRequest();
LoginServiceRequest loginServiceRequest = request.toLoginServiceRequest();
TokenParam tokenParam = userService.login(loginServiceRequest);

return ResponseEntity.ok(tokenParam);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.example.controller.dto.request;

import jakarta.validation.constraints.NotNull;
import org.example.controller.dto.LoginApiDto;
import org.example.entity.credential.AppleSocialCredential;
import org.example.entity.credential.GoogleSocialCredential;
import org.example.entity.credential.KakaoSocialCredential;
import org.example.entity.credential.SocialCredential;
import org.example.entity.credential.SocialCredentials;
import org.example.service.dto.request.LoginServiceRequest;
import org.example.vo.SocialLoginType;

public record LoginApiRequest(
Expand All @@ -17,8 +17,8 @@ public record LoginApiRequest(
String socialLoginIdentifier
) {

public LoginApiDto toLoginApiDto() {
return LoginApiDto.builder()
public LoginServiceRequest toLoginServiceRequest() {
return LoginServiceRequest.builder()
.socialCredentials(socialCredentials())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ public class UserService {


public TokenParam login(final LoginServiceRequest loginServiceRequest) {
User createdUser = userUseCase.save(loginServiceRequest.toLoginServiceDto().toUser());
User createdUser = userUseCase.save(loginServiceRequest.toUser());
UserParam userParam = UserParam.builder()
.userId(createdUser.getId())
.role(UserRoleApiType.valueOf(createdUser.getUserRole().name()))
.role(UserRoleApiType.from(createdUser))
.build();

return jwtGenerator.generate(userParam, new Date());
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package org.example.service.dto.request;

import lombok.Builder;
import org.example.entity.User;
import org.example.entity.credential.SocialCredentials;
import org.example.service.dto.LoginServiceDto;

@Builder
public record LoginServiceRequest(
SocialCredentials socialCredentials
) {

public LoginServiceDto toLoginServiceDto() {
return LoginServiceDto.builder()
public User toUser() {
return User.builder()
.socialCredentials(socialCredentials)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class User extends BaseEntity {

@Column(name = "gender", nullable = false)
@Enumerated(value = EnumType.STRING)
private UserGender userGender = UserGender.NONE;
private UserGender userGender = UserGender.NOT_CHOSEN;

@Column(name = "role", nullable = false)
@Enumerated(value = EnumType.STRING)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package org.example.vo;

public enum UserGender {
MAN, WOMAN, NONE
MAN, WOMAN, NOT_CHOSEN
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public void save(String userId, String refreshToken) {
}

@Override
public Optional<String> getOldRefreshToken(String userId) {
public Optional<String> getExistRefreshToken(String userId) {
return Optional.ofNullable(stringRedisTemplate.opsForValue().get("RT:" + userId));
}

Expand Down

0 comments on commit ff5a191

Please sign in to comment.