feat: 去除hutool工具

This commit is contained in:
2025-11-29 16:19:28 +08:00
parent e9ee523147
commit 146d841cd8
12 changed files with 729 additions and 98 deletions

View File

@ -12,11 +12,13 @@
<packaging>jar</packaging>
<dependencies>
<!-- Project -->
<dependency>
<groupId>day.gitlab</groupId>
<artifactId>dolphin-common-core</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
@ -29,10 +31,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Utilities -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>

View File

@ -1,71 +0,0 @@
package day.gitlab.dolphin.common.security.jwt;
import cn.hutool.v7.crypto.digest.DigestUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.util.StringUtils;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.UUID;
public class Jwt {
private final String secret;
private final long expire;
private final long refreshTokenExpire;
public Jwt(String secret, long expire, long refreshTokenExpire) {
this.secret = secret;
this.expire = expire;
this.refreshTokenExpire = refreshTokenExpire;
}
public String getTokenFromRequest(HttpServletRequest request) {
String token = request.getHeader("Authorization");
if (StringUtils.hasText(token) && token.startsWith("Bearer ")) {
return token.substring(7);
}
return null;
}
public String generateAccessToken(String userId) {
return Jwts.builder()
.subject(userId)
.id(UUID.randomUUID().toString())
.issuedAt(new Date())
.expiration(new Date(System.currentTimeMillis() + expire))
.claim("type", "access")
.signWith(getSigningKey())
.compact();
}
public String generateRefreshToken(String userId) {
return Jwts.builder()
.subject(userId)
.id(UUID.randomUUID().toString())
.issuedAt(new Date())
.expiration(new Date(System.currentTimeMillis() + refreshTokenExpire))
.claim("type", "refresh")
.signWith(getSigningKey())
.compact();
}
public Claims parseToken(String token) {
return Jwts.parser()
.verifyWith(getSigningKey())
.build()
.parseSignedClaims(token)
.getPayload();
}
private SecretKey getSigningKey() {
byte[] keyBytes = DigestUtil.sha256(secret);
return Keys.hmacShaKeyFor(keyBytes);
}
}

View File

@ -2,6 +2,7 @@ package day.gitlab.dolphin.common.security.jwt;
import com.fasterxml.jackson.databind.ObjectMapper;
import day.gitlab.dolphin.common.core.i18n.MessagesHelper;
import day.gitlab.dolphin.common.core.util.JWT;
import day.gitlab.dolphin.common.security.Authentication;
import day.gitlab.dolphin.common.security.AuthenticationInitialize;
import day.gitlab.dolphin.common.security.AuthenticationProvider;
@ -42,10 +43,8 @@ public class JwtAuthenticationInitialize implements AuthenticationInitialize {
@Override
public Authentication initialize(HttpServletRequest request) {
Jwt jwt = new Jwt(securityConfig.getSecret(), securityConfig.getExpire(), securityConfig.getRefreshTokenExpire());
// 1、获取Token
String token = jwt.getTokenFromRequest(request);
String token = getTokenFromRequest(request);
if (token == null) {
throw messagesHelper.newBusinessException(Exceptions.NOT_LOGIN);
}
@ -53,7 +52,7 @@ public class JwtAuthenticationInitialize implements AuthenticationInitialize {
String userId;
Date expiration;
try {
Claims claims = jwt.parseToken(token);
Claims claims = JWT.parse(securityConfig.getSecret(), token);
userId = claims.getSubject();
expiration = claims.getExpiration();
Objects.requireNonNull(userId);
@ -91,4 +90,12 @@ public class JwtAuthenticationInitialize implements AuthenticationInitialize {
return new Authentication(userPrincipal, userAuthorities);
}
private String getTokenFromRequest(HttpServletRequest request) {
String token = request.getHeader("Authorization");
if (StringUtils.hasText(token) && token.startsWith("Bearer ")) {
return token.substring(7);
}
return null;
}
}

View File

@ -1,12 +1,43 @@
package day.gitlab.dolphin.common.security.jwt;
import day.gitlab.dolphin.common.core.util.JWT;
import day.gitlab.dolphin.common.security.config.SecurityConfig;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ClaimsBuilder;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@Component
public class JwtInfo extends Jwt {
import java.util.function.Function;
public JwtInfo(SecurityConfig securityConfig) {
super(securityConfig.getSecret(), securityConfig.getExpire(), securityConfig.getRefreshTokenExpire());
@Component
public class JwtInfo {
public static final long EXPIRATION_7_DAY = 1000 * 3600 * 24 * 7;
public static final long EXPIRATION_1_DAY = 1000 * 3600 * 24;
public static final long EXPIRATION_1_HOUR = 1000 * 3600;
@Resource
private SecurityConfig securityConfig;
public String generate(long expiration, Claims claims) {
return JWT.generate(securityConfig.getSecret(), securityConfig.getExpire(), claims);
}
public String generate(long expiration, Function<ClaimsBuilder, Claims> func) {
return JWT.generate(securityConfig.getSecret(), securityConfig.getExpire(), func);
}
public String generateAccessToken(String userId) {
return JWT.generate(securityConfig.getSecret(), securityConfig.getExpire(), (builder) ->
builder.subject(userId).add("type", "access").build());
}
public String generateRefreshToken(String userId) {
return JWT.generate(securityConfig.getSecret(), securityConfig.getRefreshTokenExpire(), (builder) ->
builder.subject(userId).add("type", "refresh").build());
}
public Claims parse(String token) {
return JWT.parse(securityConfig.getSecret(), token);
}
}