Commit 06b81430a4fb65545ee69c237f1f283aa54ab584

Authored by zichun
1 parent 967f69fc

feat(usr): jwtutil signRefresh REQ-USR-004

backend/src/main/java/com/xly/erp/common/security/JwtUtil.java
... ... @@ -16,7 +16,8 @@ import java.util.Date;
16 16 @Component
17 17 public class JwtUtil {
18 18  
19   - private static final Duration TTL = Duration.ofHours(8);
  19 + public static final Duration ACCESS_TTL = Duration.ofHours(8);
  20 + public static final Duration REFRESH_TTL = Duration.ofDays(30);
20 21  
21 22 private final SecretKey key;
22 23  
... ... @@ -30,11 +31,19 @@ public class JwtUtil {
30 31 }
31 32  
32 33 public String sign(String userNo) {
  34 + return sign(userNo, ACCESS_TTL);
  35 + }
  36 +
  37 + public String signRefresh(String userNo) {
  38 + return sign(userNo, REFRESH_TTL);
  39 + }
  40 +
  41 + public String sign(String userNo, Duration ttl) {
33 42 Date now = new Date();
34 43 return Jwts.builder()
35 44 .subject(userNo)
36 45 .issuedAt(now)
37   - .expiration(new Date(now.getTime() + TTL.toMillis()))
  46 + .expiration(new Date(now.getTime() + ttl.toMillis()))
38 47 .signWith(key)
39 48 .compact();
40 49 }
... ...
backend/src/test/java/com/xly/erp/common/security/JwtUtilTest.java
... ... @@ -34,4 +34,13 @@ class JwtUtilTest {
34 34 .isInstanceOf(BizException.class)
35 35 .hasFieldOrPropertyWithValue("code", 20001);
36 36 }
  37 +
  38 + @Test
  39 + void signRefresh_signsValidLongerLivedToken() {
  40 + String accessToken = jwtUtil.sign("U1");
  41 + String refreshToken = jwtUtil.signRefresh("U1");
  42 + assertThat(jwtUtil.parse(accessToken)).isEqualTo("U1");
  43 + assertThat(jwtUtil.parse(refreshToken)).isEqualTo("U1");
  44 + assertThat(refreshToken).isNotEqualTo(accessToken);
  45 + }
37 46 }
... ...