首次提交

This commit is contained in:
guotao 2026-01-09 12:20:24 +08:00
commit 1101681331
131 changed files with 7017 additions and 0 deletions

View file

@ -0,0 +1,62 @@
package com.xjhs.findmemerchant.security;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.jwt.consumer.JwtConsumer;
import org.jose4j.jwt.consumer.JwtConsumerBuilder;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
@Component
public class JwtTokenService {
// 建议改成配置application.yml
private final String secret = "secret-key-1234567890";
private final long expireMillis = 30 * 24 * 60 * 60 * 1000L; // 30
/**
* 生成 JWT
*/
public String generateToken(String mobile) throws Exception {
JwtClaims claims = new JwtClaims();
claims.setSubject(mobile);
claims.setIssuedAt(NumericDate.now());
claims.setExpirationTimeMinutesInTheFuture(expireMillis / 1000f / 60f); // 转分钟
JsonWebSignature jws = new JsonWebSignature();
jws.setPayload(claims.toJson());
jws.setKey(new javax.crypto.spec.SecretKeySpec(
secret.getBytes(StandardCharsets.UTF_8),
"HmacSha256"
));
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
return jws.getCompactSerialization();
}
/**
* 校验并解析手机号
*/
public String parseMobile(String token) throws Exception {
var claims = this.parse(token);
return claims.getSubject();
}
public JwtClaims parse(String token) throws Exception {
JwtConsumer consumer = new JwtConsumerBuilder()
.setRequireExpirationTime()
.setRequireSubject()
.setVerificationKey(
new javax.crypto.spec.SecretKeySpec(
secret.getBytes(StandardCharsets.UTF_8),
"HmacSha256"
)
)
.build();
return consumer.processToClaims(token);
}
}