NutzCN Logo
问答 nutzcn源码中AccessTokenFilter对time的处理
发布于 2751天前 作者 daren990 1634 次浏览 复制 上一个帖子 下一个帖子
标签:

关于下面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();
}
1 回复

分开问,下次不要一个帖子里面问N个问题.

第一个问题: time是客户端时间,不可信任,这个判断是为了确保客户端的时间跟服务器的时间差不超过10分钟,超过就直接reject. 而且time的值是参与key的sha1计算, 能少算一次是一次.

第二个问题: 对, 让它变成shiro内的登录状态.

添加回复
请先登陆
回到顶部