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,7 +16,8 @@ import java.util.Date;
16 @Component 16 @Component
17 public class JwtUtil { 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 private final SecretKey key; 22 private final SecretKey key;
22 23
@@ -30,11 +31,19 @@ public class JwtUtil { @@ -30,11 +31,19 @@ public class JwtUtil {
30 } 31 }
31 32
32 public String sign(String userNo) { 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 Date now = new Date(); 42 Date now = new Date();
34 return Jwts.builder() 43 return Jwts.builder()
35 .subject(userNo) 44 .subject(userNo)
36 .issuedAt(now) 45 .issuedAt(now)
37 - .expiration(new Date(now.getTime() + TTL.toMillis())) 46 + .expiration(new Date(now.getTime() + ttl.toMillis()))
38 .signWith(key) 47 .signWith(key)
39 .compact(); 48 .compact();
40 } 49 }
backend/src/test/java/com/xly/erp/common/security/JwtUtilTest.java
@@ -34,4 +34,13 @@ class JwtUtilTest { @@ -34,4 +34,13 @@ class JwtUtilTest {
34 .isInstanceOf(BizException.class) 34 .isInstanceOf(BizException.class)
35 .hasFieldOrPropertyWithValue("code", 20001); 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 }