token续时的问题

yangfan321p 2017-12-26 08:58:34

public class CreateJWT {

private static final String SECRET = "XX#$%()(#*!()!KL<><MQLMNQNQJQK sdfkjsdrow32234545fdf>?N<:{LWPW";

private static final String EXP = "exp";

private static final String PAYLOAD = "payload";

//加密封装了用户信息的实体类
public static <T> String sign(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);
System.out.println("时长为=="+maxAge);
return signer.sign(claims);
} catch(Exception e) {
return null;
}
}

//解密token返回实体类
public static<T> T unsign(String jwt, Class<T> classT) {
final JWTVerifier verifier = new JWTVerifier(SECRET);
try {
final Map<String,Object> claims= verifier.verify(jwt);
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;
}
}
}

只有一个加密和解密的方法,请问用户每次请求应该给他重新续时吧,我设置是半小时,那怎么改
之前项目维护人写的是把这个加密的token存在了redis中,那我拦截器拦截了用户带着token的请求,解密后和redis中的token解密比对后通过,如果没有过期,我该怎么延长token时间?
...全文
282 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cathy313 2017-12-27
  • 打赏
  • 举报
回复
if (exp > currentTimeMillis) 时,修改你的map中的EXP的值,比如map.put(EXP, System.currentTimeMillis()+maxAge)覆盖掉原来的时间信息

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧