添加工具类
package com.pp.utils;
import com.auth0.jwt.JWTSigner;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.internal.com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class JwtUtils {
private static final String SECRET = "abc123!@#";
private static final String EXP = "exp";
private static final String PAYLOAD = "payload";
public static <T> String getToken(T object, long maxAge) {
try {
final JWTSigner signer = new JWTSigner(SECRET);
final Map<String, Object> claims = new HashMap<String, Object>();
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(object);
claims.put(PAYLOAD, jsonString);
claims.put(EXP, System.currentTimeMillis() + maxAge);
return signer.sign(claims);
} catch (Exception e) {
return null;
}
}
public static <T> T getObject(String token, Class<T> classT) {
final JWTVerifier verifier = new JWTVerifier(SECRET);
try {
final Map<String, Object> claims = verifier.verify(token);
if (claims.containsKey(EXP) && claims.containsKey(PAYLOAD)) {
long exp = (Long) claims.get(EXP);
long currentTimeMillis = System.currentTimeMillis();
if (exp > currentTimeMillis) {
String json = (String) claims.get(PAYLOAD);
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(json, classT);
}
}
return null;
} catch (Exception e) {
return null;
}
}
}
pom里 添加jwt依赖
<!-- /java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>2.2.2</version>
</dependency>
模拟生成还原
package com.pp.utils;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ApplicationContext;
import com.alibaba.fastjson.JSON;
import com.pp.Astart;
import com.pp.dao.UserMapper;
import com.pp.entity.User;
public class MyTester {
public static void main(String[] args) throws InterruptedException {
ApplicationContext context = SpringApplication.run(Astart.class, args);
UserMapper userMapper = context.getBean(UserMapper.class);
User user = userMapper.selectByAccountAndPassword("ppbb1", "Aa1234").get(0);
System.out.println("currentUser="+JSON.toJSONString(user));
System.out.println("2秒后生成jwt-token");
//模拟生成jwt-token
Thread.sleep(2000);
String token = JwtUtils.getToken(user, 6000);
System.out.println("jwt-token"+token+"(6秒内有效)");
//还原jwt-token
User userx = JwtUtils.getObject(token, User.class);
System.out.println("还原出user="+JSON.toJSONString(userx));
}
}