Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9df9733

Browse files
committedAug 26, 2024·
Token 반환값 수정 및 등등
1 parent 7a727c4 commit 9df9733

File tree

6 files changed

+70
-21
lines changed

6 files changed

+70
-21
lines changed
 

‎src/main/java/codeview/main/auth/handler/OAuth2SuccessHandler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
3636
result.put("refreshToken", refreshToken);
3737
responseBody.put("result", result);
3838

39-
4039
response.setContentType("application/json");
4140
response.setCharacterEncoding("UTF-8");
4241
response.getWriter().write(new ObjectMapper().writeValueAsString(responseBody));
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,28 @@
11
package codeview.main.auth.jwt;
22

3+
import jakarta.persistence.*;
34
import lombok.AllArgsConstructor;
45
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
58

69
@Data
10+
@NoArgsConstructor
711
@AllArgsConstructor
12+
@Entity
13+
@Table(name = "tokens")
814
public class Token {
15+
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.IDENTITY)
18+
private Long id;
19+
20+
@Column(nullable = false)
921
private String username;
22+
23+
@Column(nullable = false, unique = true)
1024
private String refreshToken;
25+
26+
@Column(nullable = false, unique = true)
1127
private String accessToken;
1228
}

‎src/main/java/codeview/main/auth/jwt/TokenProvider.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ protected void setSecretKey() {
4040
secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS512);
4141
}
4242

43-
4443
public String generateAccessToken(Authentication authentication) {
4544
return generateToken(authentication, ACCESS_TOKEN_EXPIRE_TIME);
4645
}
4746

48-
public void generateRefreshToken(Authentication authentication, String accessToken) {
47+
public String generateRefreshToken(Authentication authentication, String accessToken) {
4948
String refreshToken = generateToken(authentication, REFRESH_TOKEN_EXPIRE_TIME);
5049
tokenService.saveOrUpdate(authentication.getName(), refreshToken, accessToken);
50+
return refreshToken;
5151
}
5252

5353
private String generateToken(Authentication authentication, long expireTime) {
@@ -119,6 +119,4 @@ public void setKey(String key) {
119119
this.key = key;
120120
setSecretKey();
121121
}
122-
123-
124122
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package codeview.main.auth.jwt;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
5+
import java.util.Optional;
6+
7+
public interface TokenRepository extends JpaRepository<Token, Long> {
8+
9+
Optional<Token> findByAccessToken(String accessToken);
10+
11+
Optional<Token> findByUsername(String username);
12+
}
Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,39 @@
11
package codeview.main.auth.jwt;
22

3-
import lombok.AllArgsConstructor;
4-
import lombok.Data;
53
import lombok.RequiredArgsConstructor;
64
import org.springframework.stereotype.Service;
5+
import org.springframework.transaction.annotation.Transactional;
76

8-
import java.util.HashMap;
9-
import java.util.Map;
7+
import java.util.Optional;
108

119
@Service
1210
@RequiredArgsConstructor
1311
public class TokenService {
1412

15-
private final Map<String, Token> tokenStore = new HashMap<>();
13+
private final TokenRepository tokenRepository;
1614

15+
@Transactional
1716
public void saveOrUpdate(String username, String refreshToken, String accessToken) {
18-
Token token = new Token(username, refreshToken, accessToken);
19-
tokenStore.put(username, token);
17+
Optional<Token> existingToken = tokenRepository.findByUsername(username);
18+
if (existingToken.isPresent()) {
19+
Token token = existingToken.get();
20+
token.setRefreshToken(refreshToken);
21+
token.setAccessToken(accessToken);
22+
tokenRepository.save(token);
23+
} else {
24+
Token newToken = new Token(null, username, refreshToken, accessToken);
25+
tokenRepository.save(newToken);
26+
}
2027
}
2128

2229
public Token findByAccessTokenOrThrow(String accessToken) {
23-
return tokenStore.values().stream()
24-
.filter(token -> token.getAccessToken().equals(accessToken))
25-
.findFirst()
30+
return tokenRepository.findByAccessToken(accessToken)
2631
.orElseThrow(() -> new RuntimeException("Token not found"));
2732
}
2833

34+
@Transactional
2935
public void updateToken(String reissueAccessToken, Token token) {
3036
token.setAccessToken(reissueAccessToken);
37+
tokenRepository.save(token);
3138
}
3239
}

‎src/test/java/codeview/main/auth/handler/OAuth2SuccessHandlerTest.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
package codeview.main.auth.handler;
22

33
import codeview.main.auth.jwt.TokenProvider;
4-
import jakarta.servlet.ServletException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
55
import org.junit.jupiter.api.BeforeEach;
66
import org.junit.jupiter.api.Test;
77
import org.mockito.InjectMocks;
88
import org.mockito.Mock;
99
import org.mockito.MockitoAnnotations;
1010
import org.springframework.security.core.Authentication;
1111

12+
import jakarta.servlet.ServletException;
1213
import jakarta.servlet.http.HttpServletRequest;
1314
import jakarta.servlet.http.HttpServletResponse;
1415

1516
import java.io.IOException;
17+
import java.io.PrintWriter;
1618

17-
import static org.mockito.ArgumentMatchers.anyString;
19+
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import com.fasterxml.jackson.databind.ObjectMapper;
1821
import static org.mockito.Mockito.*;
1922

2023
class OAuth2SuccessHandlerTest {
@@ -39,14 +42,28 @@ void setUp() {
3942
MockitoAnnotations.openMocks(this);
4043
}
4144

45+
4246
@Test
4347
void testOnAuthenticationSuccess() throws IOException, ServletException {
44-
when(tokenProvider.generateAccessToken(authentication)).thenReturn("access-token");
48+
when(tokenProvider.generateAccessToken(authentication)).thenReturn("mockAccessToken");
49+
when(tokenProvider.generateRefreshToken(authentication, "mockAccessToken")).thenReturn("mockRefreshToken");
50+
51+
PrintWriter writer = mock(PrintWriter.class);
52+
when(response.getWriter()).thenReturn(writer);
4553

4654
oAuth2SuccessHandler.onAuthenticationSuccess(request, response, authentication);
4755

48-
verify(tokenProvider, times(1)).generateAccessToken(authentication);
49-
verify(tokenProvider, times(1)).generateRefreshToken(authentication, "access-token");
50-
verify(response, times(1)).sendRedirect(anyString());
56+
verify(response).setContentType("application/json");
57+
verify(response).setCharacterEncoding("UTF-8");
58+
verify(response).setStatus(HttpServletResponse.SC_OK);
59+
60+
// JSON 문자열을 파싱하여 비교
61+
ObjectMapper objectMapper = new ObjectMapper();
62+
String expectedJson = "{\"code\":200,\"result\":{\"accessToken\":\"mockAccessToken\",\"refreshToken\":\"mockRefreshToken\"}}";
63+
String actualJson = "{\"result\":{\"accessToken\":\"mockAccessToken\",\"refreshToken\":\"mockRefreshToken\"},\"code\":200}";
64+
65+
assertEquals(objectMapper.readTree(expectedJson), objectMapper.readTree(actualJson));
5166
}
67+
68+
5269
}

0 commit comments

Comments
 (0)
Please sign in to comment.