Skip to content

Commit

Permalink
refactor: JwtTokenService -> Provider 역할 수행하도록 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
char-yb committed Sep 20, 2024
1 parent 78c9f41 commit 4773ca2
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecord;
import com.depromeet.stonebed.global.error.ErrorCode;
import com.depromeet.stonebed.global.error.exception.CustomException;
import com.depromeet.stonebed.global.security.JwtTokenProvider;
import com.depromeet.stonebed.global.util.MemberUtil;
import java.util.List;
import java.util.Optional;
Expand All @@ -40,7 +41,7 @@ public class AuthService {

private final AppleClient appleClient;
private final KakaoClient kakaoClient;
private final JwtTokenService jwtTokenService;
private final JwtTokenProvider jwtTokenProvider;
private final MemberUtil memberUtil;

public SocialClientResponse authenticateFromProvider(OAuthProvider provider, String token) {
Expand Down Expand Up @@ -83,7 +84,7 @@ public AuthTokenResponse socialLogin(

// 임시 토큰 발행
TokenPairResponse temporaryTokenPair =
jwtTokenService.generateTemporaryTokenPair(newMember);
jwtTokenProvider.generateTemporaryTokenPair(newMember);
newMember.updateLastLoginAt();
log.info("임시 회원가입 진행: {}", newMember.getId());
return AuthTokenResponse.of(temporaryTokenPair, true);
Expand All @@ -110,9 +111,9 @@ public AuthTokenResponse registerMember(CreateMemberRequest request) {
public AuthTokenResponse reissueTokenPair(RefreshTokenRequest request) {
// 리프레시 토큰을 이용해 새로운 액세스 토큰 발급
RefreshTokenDto refreshTokenDto =
jwtTokenService.retrieveRefreshToken(request.refreshToken());
jwtTokenProvider.retrieveRefreshToken(request.refreshToken());
RefreshTokenDto refreshToken =
jwtTokenService.createRefreshTokenDto(refreshTokenDto.memberId());
jwtTokenProvider.createRefreshTokenDto(refreshTokenDto.memberId());

Member member = memberUtil.getMemberByMemberId(refreshToken.memberId());

Expand All @@ -121,11 +122,11 @@ public AuthTokenResponse reissueTokenPair(RefreshTokenRequest request) {
}

private TokenPairResponse getLoginResponse(Member member) {
return jwtTokenService.generateTokenPair(member.getId(), MemberRole.USER);
return jwtTokenProvider.generateTokenPair(member.getId(), MemberRole.USER);
}

private TokenPairResponse getTemporaryLoginResponse(Member member) {
return jwtTokenService.generateTokenPair(member.getId(), MemberRole.TEMPORARY);
return jwtTokenProvider.generateTokenPair(member.getId(), MemberRole.TEMPORARY);
}

public void withdraw() {
Expand All @@ -144,7 +145,7 @@ public void withdraw() {
withdrawMemberRelationByMemberId(
missionRecords.stream().map(MissionRecord::getId).toList(), member.getId());

jwtTokenService.deleteRefreshToken(member.getId());
jwtTokenProvider.deleteRefreshToken(member.getId());

memberRepository.deleteById(member.getId());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import static org.springframework.http.HttpHeaders.*;
import static org.springframework.security.config.Customizer.*;

import com.depromeet.stonebed.domain.auth.application.JwtTokenService;
import com.depromeet.stonebed.global.annotation.ConditionalOnProfile;
import com.depromeet.stonebed.global.filter.JwtAuthenticationFilter;
import com.depromeet.stonebed.global.security.JwtTokenProvider;
import com.depromeet.stonebed.global.util.CookieUtil;
import com.depromeet.stonebed.global.util.SpringEnvironmentUtil;
import com.depromeet.stonebed.infra.properties.SwaggerProperties;
Expand All @@ -34,7 +34,7 @@
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurityConfig {
private final JwtTokenService jwtTokenService;
private final JwtTokenProvider jwtTokenProvider;
private final CookieUtil cookieUtil;
private final SpringEnvironmentUtil springEnvironmentUtil;

Expand Down Expand Up @@ -69,7 +69,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
response.setStatus(401)));

http.addFilterBefore(
jwtAuthenticationFilter(jwtTokenService, cookieUtil),
jwtAuthenticationFilter(jwtTokenProvider, cookieUtil),
UsernamePasswordAuthenticationFilter.class);

return http.build();
Expand Down Expand Up @@ -123,7 +123,7 @@ public CorsConfigurationSource corsConfigurationSource() {

@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter(
JwtTokenService jwtTokenService, CookieUtil cookieUtil) {
return new JwtAuthenticationFilter(jwtTokenService, cookieUtil);
JwtTokenProvider jwtTokenProvider, CookieUtil cookieUtil) {
return new JwtAuthenticationFilter(jwtTokenProvider, cookieUtil);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

import static com.depromeet.stonebed.global.common.constants.SecurityConstants.*;

import com.depromeet.stonebed.domain.auth.application.JwtTokenService;
import com.depromeet.stonebed.domain.auth.dto.AccessTokenDto;
import com.depromeet.stonebed.domain.auth.dto.RefreshTokenDto;
import com.depromeet.stonebed.domain.member.domain.MemberRole;
import com.depromeet.stonebed.global.security.JwtTokenProvider;
import com.depromeet.stonebed.global.security.PrincipalDetails;
import com.depromeet.stonebed.global.util.CookieUtil;
import jakarta.servlet.FilterChain;
Expand All @@ -29,7 +29,7 @@
@RequiredArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter {

private final JwtTokenService jwtTokenService;
private final JwtTokenProvider jwtTokenProvider;
private final CookieUtil cookieUtil;

private static String extractAccessTokenFromHeader(HttpServletRequest request) {
Expand All @@ -51,7 +51,7 @@ protected void doFilterInternal(
// 헤더에 AT가 있으면 우선적으로 검증
if (accessTokenHeaderValue != null) {
AccessTokenDto accessTokenDto =
jwtTokenService.retrieveAccessToken(accessTokenHeaderValue);
jwtTokenProvider.retrieveAccessToken(accessTokenHeaderValue);
if (accessTokenDto != null) {
setAuthenticationToContext(accessTokenDto.memberId(), accessTokenDto.memberRole());
filterChain.doFilter(request, response);
Expand All @@ -65,7 +65,7 @@ protected void doFilterInternal(
return;
}

AccessTokenDto accessTokenDto = jwtTokenService.retrieveAccessToken(accessTokenValue);
AccessTokenDto accessTokenDto = jwtTokenProvider.retrieveAccessToken(accessTokenValue);

// AT가 유효하면 통과
if (accessTokenDto != null) {
Expand All @@ -76,15 +76,15 @@ protected void doFilterInternal(

// AT가 만료된 경우 AT 재발급, 만료되지 않은 경우 null 반환
Optional<AccessTokenDto> reissuedAccessToken =
Optional.ofNullable(jwtTokenService.reissueAccessTokenIfExpired(accessTokenValue));
Optional.ofNullable(jwtTokenProvider.reissueAccessTokenIfExpired(accessTokenValue));
// RT 유효하면 파싱, 유효하지 않으면 null 반환
RefreshTokenDto refreshTokenDto = jwtTokenService.retrieveRefreshToken(refreshTokenValue);
RefreshTokenDto refreshTokenDto = jwtTokenProvider.retrieveRefreshToken(refreshTokenValue);

// AT가 만료되었고, RT가 유효하면 AT, RT 재발급
if (reissuedAccessToken.isPresent() && refreshTokenDto != null) {
AccessTokenDto accessToken = reissuedAccessToken.get(); // 재발급된 AT
RefreshTokenDto refreshToken =
jwtTokenService.createRefreshTokenDto(refreshTokenDto.memberId());
jwtTokenProvider.createRefreshTokenDto(refreshTokenDto.memberId());

// 쿠키에 재발급된 AT, RT 저장
HttpHeaders httpHeaders =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.depromeet.stonebed.domain.auth.application;
package com.depromeet.stonebed.global.security;

import static com.depromeet.stonebed.global.common.constants.SecurityConstants.*;

Expand All @@ -17,7 +17,7 @@

@Service
@RequiredArgsConstructor
public class JwtTokenService {
public class JwtTokenProvider {

private final JwtUtil jwtUtil;
private final RefreshTokenRepository refreshTokenRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.depromeet.stonebed.domain.member.domain.MemberStatus;
import com.depromeet.stonebed.domain.missionRecord.dao.MissionRecordBoostRepository;
import com.depromeet.stonebed.domain.missionRecord.dao.MissionRecordRepository;
import com.depromeet.stonebed.global.security.JwtTokenProvider;
import com.depromeet.stonebed.global.util.MemberUtil;
import java.util.Optional;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -30,7 +31,7 @@ class AuthServiceTest extends FixtureMonkeySetUp {

@InjectMocks private AuthService authService;

@Mock private JwtTokenService jwtTokenService;
@Mock private JwtTokenProvider jwtTokenProvider;

@Mock private MemberRepository memberRepository;

Expand Down Expand Up @@ -60,7 +61,7 @@ void setUp() {
when(memberRepository.findByOauthInfoOauthProviderAndOauthInfoOauthId(
provider.getValue(), oauthId))
.thenReturn(Optional.of(member));
when(jwtTokenService.generateTokenPair(member.getId(), MemberRole.USER))
when(jwtTokenProvider.generateTokenPair(member.getId(), MemberRole.USER))
.thenReturn(new TokenPairResponse("accessToken", "refreshToken"));

// when
Expand All @@ -78,7 +79,7 @@ void setUp() {
when(memberRepository.findByOauthInfoOauthProviderAndOauthInfoOauthId(
provider.getValue(), oauthId))
.thenReturn(Optional.of(member));
when(jwtTokenService.generateTokenPair(member.getId(), MemberRole.USER))
when(jwtTokenProvider.generateTokenPair(member.getId(), MemberRole.USER))
.thenReturn(new TokenPairResponse("accessToken", "refreshToken"));

// when
Expand All @@ -99,7 +100,7 @@ void setUp() {
provider.getValue(), oauthId))
.thenReturn(Optional.empty());
when(memberRepository.save(any(Member.class))).thenReturn(newMember);
when(jwtTokenService.generateTemporaryTokenPair(any(Member.class)))
when(jwtTokenProvider.generateTemporaryTokenPair(any(Member.class)))
.thenReturn(temporaryTokenPair);

// when
Expand All @@ -111,7 +112,7 @@ void setUp() {
assertEquals("refreshToken", response.refreshToken());
assertTrue(response.isTemporaryToken());
verify(memberRepository).save(any(Member.class));
verify(jwtTokenService).generateTemporaryTokenPair(any(Member.class));
verify(jwtTokenProvider).generateTemporaryTokenPair(any(Member.class));
}

@Test
Expand Down Expand Up @@ -147,7 +148,7 @@ void setUp() {
assertEquals("", member.getProfile().getNickname());

// jwtTokenService에서 리프레시 토큰 삭제가 호출되었는지 확인
verify(jwtTokenService).deleteRefreshToken(member.getId());
verify(jwtTokenProvider).deleteRefreshToken(member.getId());

// MemberStatus가 DELETED로 변경되었는지 확인
assertEquals(MemberStatus.DELETED, member.getStatus());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.depromeet.stonebed.domain.auth.dto.response.TokenPairResponse;
import com.depromeet.stonebed.domain.member.domain.Member;
import com.depromeet.stonebed.domain.member.domain.MemberRole;
import com.depromeet.stonebed.global.security.JwtTokenProvider;
import com.depromeet.stonebed.global.util.JwtUtil;
import io.jsonwebtoken.ExpiredJwtException;
import java.util.Optional;
Expand All @@ -24,9 +25,9 @@

@ActiveProfiles("test")
@ExtendWith(MockitoExtension.class)
class JwtTokenServiceTest extends FixtureMonkeySetUp {
class JwtTokenProviderTest extends FixtureMonkeySetUp {

@InjectMocks private JwtTokenService jwtTokenService;
@InjectMocks private JwtTokenProvider jwtTokenProvider;

@Mock private JwtUtil jwtUtil;
@Mock private RefreshTokenRepository refreshTokenRepository;
Expand All @@ -43,7 +44,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
when(jwtUtil.generateRefreshToken(memberId)).thenReturn(refreshToken);

// when
TokenPairResponse tokenPair = jwtTokenService.generateTokenPair(memberId, memberRole);
TokenPairResponse tokenPair = jwtTokenProvider.generateTokenPair(memberId, memberRole);

// then
assertNotNull(tokenPair);
Expand All @@ -63,7 +64,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
when(jwtUtil.generateRefreshToken(temporaryMember.getId())).thenReturn(refreshToken);

// when
TokenPairResponse tokenPair = jwtTokenService.generateTemporaryTokenPair(temporaryMember);
TokenPairResponse tokenPair = jwtTokenProvider.generateTemporaryTokenPair(temporaryMember);

// then
assertNotNull(tokenPair);
Expand All @@ -81,7 +82,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
.thenReturn(new AccessTokenDto(memberId, memberRole, tokenValue));

// when
AccessTokenDto accessTokenDto = jwtTokenService.createAccessTokenDto(memberId, memberRole);
AccessTokenDto accessTokenDto = jwtTokenProvider.createAccessTokenDto(memberId, memberRole);

// then
assertNotNull(accessTokenDto);
Expand All @@ -101,7 +102,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
when(jwtUtil.parseAccessToken(accessTokenValue)).thenReturn(accessTokenDto);

// when
AccessTokenDto result = jwtTokenService.retrieveAccessToken(accessTokenValue);
AccessTokenDto result = jwtTokenProvider.retrieveAccessToken(accessTokenValue);

// then
assertNotNull(result);
Expand All @@ -120,7 +121,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
.thenReturn(Optional.of(refreshToken));

// when
RefreshTokenDto result = jwtTokenService.retrieveRefreshToken(refreshTokenValue);
RefreshTokenDto result = jwtTokenProvider.retrieveRefreshToken(refreshTokenValue);

// then
assertNotNull(result);
Expand All @@ -134,7 +135,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
when(jwtUtil.parseAccessToken(accessTokenValue)).thenThrow(new RuntimeException());

// when
AccessTokenDto result = jwtTokenService.retrieveAccessToken(accessTokenValue);
AccessTokenDto result = jwtTokenProvider.retrieveAccessToken(accessTokenValue);

// then
assertNull(result);
Expand All @@ -151,7 +152,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
.thenReturn(Optional.empty());

// when
RefreshTokenDto result = jwtTokenService.retrieveRefreshToken(refreshTokenValue);
RefreshTokenDto result = jwtTokenProvider.retrieveRefreshToken(refreshTokenValue);

// then
assertNull(result);
Expand All @@ -165,7 +166,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
.thenReturn(new AccessTokenDto(1L, MemberRole.USER, accessTokenValue));

// when
AccessTokenDto result = jwtTokenService.reissueAccessTokenIfExpired(accessTokenValue);
AccessTokenDto result = jwtTokenProvider.reissueAccessTokenIfExpired(accessTokenValue);

// then
assertNull(result);
Expand All @@ -182,7 +183,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
when(jwtUtil.generateRefreshTokenDto(memberId)).thenReturn(refreshTokenDto);

// when
RefreshTokenDto result = jwtTokenService.createRefreshTokenDto(memberId);
RefreshTokenDto result = jwtTokenProvider.createRefreshTokenDto(memberId);

// then
assertNotNull(result);
Expand All @@ -208,7 +209,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
when(jwtUtil.generateAccessTokenDto(memberId, memberRole)).thenReturn(accessTokenDto);

// when
AccessTokenDto result = jwtTokenService.reissueAccessTokenIfExpired(accessTokenValue);
AccessTokenDto result = jwtTokenProvider.reissueAccessTokenIfExpired(accessTokenValue);

// then
assertNotNull(result);
Expand All @@ -221,7 +222,7 @@ class JwtTokenServiceTest extends FixtureMonkeySetUp {
Long memberId = fixtureMonkey.giveMeOne(Long.class);

// when
jwtTokenService.deleteRefreshToken(memberId);
jwtTokenProvider.deleteRefreshToken(memberId);

// then
verify(refreshTokenRepository).deleteById(memberId);
Expand Down

0 comments on commit 4773ca2

Please sign in to comment.