关于下面check过期时间的,为什么要现用当前时间比较,redis本身已经有过期时间了,后面也做了判断,这个是基于性能和安全性考虑的吗?
@Aop("redis")
public boolean checkNonce(String nonce, String time) {//
try {
long t = Long.parseLong(time);
if (System.currentTimeMillis() - t > 10*60*1000) {
return false;
}
String key = "at:nonce:"+nonce;
Long re = jedis().setnx(key, "");
if (re == 0) {//如果key不存在则返回
return false;
}
jedis().expire(key, 10*60);//如果存在则延长其生命周期10分钟
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
还有一个AccessTokenFilter类的这个方法,他是做什么用的,因为在process方法中已经对非法的过期的请求进行拦截了,这个是用来整合shiro的吗,用于把请求信息包含的认证信息同步到shiro中吗
public void process(ActionContext ac) throws Throwable {
Subject subject = SecurityUtils.getSubject();
Long uid = (Long) subject.getSession().getAttribute("me");
if (!subject.isAuthenticated())
subject.login(new SimpleShiroToken(uid));
doNext(ac);
if (!subject.isAuthenticated())
subject.logout();
}