关于token时效性
前后端交互的token,在用户还在操作的过程中,发起请求,发现token失效。有没有办法防止这类问题的发生;前后端需要对token如何处理;
万分感谢!!!
-
2019-11-14
public class SysUserTokenServiceImpl extends BaseServiceImpl<SysUserTokenDao, SysUserTokenEntity> implements SysUserTokenService {
/**
* 12小时后过期
*/
private final static int EXPIRE = 3600 * 12;
@Override
public Result createToken(Long userId) {
//用户token
String token;
//当前时间
Date now = new Date();
//过期时间
Date expireTime = new Date(now.getTime() + EXPIRE * 1000);
//判断是否生成过token
SysUserTokenEntity tokenEntity = baseDao.getByUserId(userId);
if(tokenEntity == null){
//生成一个token
token = TokenGenerator.generateValue();
tokenEntity = new SysUserTokenEntity();
tokenEntity.setUserId(userId);
tokenEntity.setToken(token);
tokenEntity.setUpdateDate(now);
tokenEntity.setExpireDate(expireTime);
//保存token
this.insert(tokenEntity);
}else{
//判断token是否过期
if(tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){
//token过期,重新生成token
token = TokenGenerator.generateValue();
}else {
token = tokenEntity.getToken();
}
tokenEntity.setToken(token);
tokenEntity.setUpdateDate(now);
tokenEntity.setExpireDate(expireTime);
//更新token
this.updateById(tokenEntity);
}
Map<String, Object> map = new HashMap<>(2);
map.put(Constant.TOKEN_HEADER, token);
map.put("expire", EXPIRE);
return new Result().ok(map);
}
@Override
public void logout(Long userId) {
//生成一个token
String token = TokenGenerator.generateValue();
//修改token
baseDao.updateToken(userId, token);
}
}
-
2019-11-14
楼上的代码 修改有效期 Date expireTime = new Date(now.getTime() + EXPIRE * 9999999);
-
2019-11-14
/**
* 12小时后过期
*/
private final static int EXPIRE = 3600 * 12;
这个也加长
-
2019-12-16
@一缕阳光 多谢
-
2019-12-16
@kaysen 分数奖励下哈face[嘻嘻]
-
2020-05-09
@一缕阳光 这么改没有解决根本原因吧,你这样改 是不是永远都不会失效了?
-
2022-09-10
前端在线状态下 每次1小时向后端请求从新生成token ,前端Android (sever 可以向后端申请最新的token),我是这么做 ,