import com.auth0.jwt.JWTSigner;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.internal.com.fasterxml.jackson.databind.ObjectMapper;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JwtUtils {
private static final String SECRET="***********";
private static final String EXP="exp";
private static final String PAYLOAD="payload";
/**
* 加密
* @param object 加密数据
* @param maxTime 有效期(毫秒数)
* @param <T>
* @return
*/
public static <T> String encode(T object,long maxTime){
try{
final JWTSigner signer=new JWTSigner(SECRET);
final Map<String ,Object> data=new HashMap<>(10);
ObjectMapper objectMapper=new ObjectMapper();
String jsonString=objectMapper.writeValueAsString(object);
data.put(PAYLOAD,jsonString);
data.put(EXP,System.currentTimeMillis()+maxTime);
return signer.sign(data);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* 数据解密
* @param jwt 解密数据
* @param tClass 解密类型
* @param <T>
* @return
*/
public static <T> T decode(String jwt,Class<T> tClass){
final JWTVerifier jwtVerifier=new JWTVerifier(SECRET);
try{
final Map<String,Object> data=jwtVerifier.verify(jwt);
//判断数据是否超时或者符合标准
if(data.containsKey(EXP)&&data.containsKey(PAYLOAD)){
long exp= (long) data.get(EXP);
long currentTimeMillis=System.currentTimeMillis();
if(exp>currentTimeMillis){
String json= (String) data.get(PAYLOAD);
ObjectMapper objectMapper=new ObjectMapper();
return objectMapper.readValue(json,tClass);
}
}
return null;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public static String jjwtEncode(String userId,long maxTime){
JwtBuilder jwtBuilder = Jwts.builder().setId(userId)
.setSubject(userId)
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, SECRET)
.setExpiration(new Date(new Date().getTime() + maxTime));
String jjwtToken = jwtBuilder.compact();
return jjwtToken;
}
public static String jjwtDecode(String token){
Claims claims = Jwts.parser().setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody();
String id = claims.getId();
return id;
}
public static void main(String[] args) {
//String s = jjwtEncode("3523ggeheeeeeeee", 30000);
//System.out.println(s);
//String s1 = jjwtDecode(s);
//System.out.println(s1);
}
}
jwt的token生成和解析
最新推荐文章于 2024-05-11 05:04:10 发布