JWT技术通常用来做微服务无状态验证,简介便用,不占用服务器内存空间。
废话不多说,工具类如下,直接拿去用
package com.demo.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @Author lf
* @Date 2021-5-13 7:36
*/
public class JwtUtil {
public static String createToken(Map<String,String> payload){
JWTCreator.Builder builder = JWT.create();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE,30);//超时时间30分钟
Set<Map.Entry<String, String>> entries = payload.entrySet();
//设置负载
for (Map.Entry<String, String> entry: entries) {
builder.withClaim(entry.getKey(),entry.getValue());
}
String token = builder
.withExpiresAt(calendar.getTime())//过期时间
.sign(Algorithm.HMAC256("pro2021"));//签名加盐
return token;
}
//校验
public static DecodedJWT verify(String token) throws Exception{
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("pro2021")).build();
DecodedJWT verify = jwtVerifier.verify(token);
return verify;
}
public boolean checkToken(String token){
try {
verify(token);
return true;
}catch (SignatureVerificationException e){
//这里可以用slf4j做日志
System.out.println("签名不一致异常"+e);
}catch (TokenExpiredException e){
System.out.println("令牌过期异常"+e);
}catch (Exception e){
System.out.println("token认证失败");
}
return false;
}
public static String getWitchClaim(String token,String key){
try {
DecodedJWT verify = verify(token);
return verify.getClaim(key).asString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
/*HashMap<String, String> map = new HashMap<>();
map.put("name","张三");
String token = createToken(map);
System.out.println(token);*/
String name = getWitchClaim("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoi5byg5LiJIiwiZXhwIjoxNjIwODY2Mjg0fQ.ruiW7eTAA1LUUsaozm5OUF75DPLCmACKWU5-cxTDkRA", "name");
System.out.println(name);
}
}
如果你喜欢我的分享,欢迎关注微信公众号 java学长分享技术干货!
悄悄告诉你免费赠送重磅互联网架构师教程,提升职场技术水平!