NutzCN Logo
问答 Shiro的Session过期了
发布于 3054天前 作者 qq_74967e40 4990 次浏览 复制 上一个帖子 下一个帖子
标签: shiro session

过期时间如何设置我回去查询
现在的问题是 Session过期之后他不会自动跳到注册页面
也就是说说 不会认为是验证异常
何解?

13 回复

ajax才不会跳吧?

如果是直接访问url,而这个url需要登录,那肯定会跳。session过期跟没登录是一样的行为

来自炫酷的 NutzCN

@wendal 我还在默认跳转上加了@RequiresUser的
结果session过期没有反应。。。
我通过

SecurityUtils.getSubject().getSession(true).setAttribute("currentUser", user);

这种方式存的session,过期之后Beetl前台session.currentUser以及后台使用session.get都是null的
然而并不会跳

我存currentUser是在NutDaoRealm里

@qq_74967e40 加@SessionBy了吗? 让shiro的session替换容器的session机制,在NutFilter作用域内

@SessionBy(ShiroSessionProvier.class)
public class MainModule

在最新的shiro插件里面有

来自炫酷的 NutzCN

另外,debug一下ShiroProcessor,看看有没有被调用到,因为就是它负责读取shiro的注解,并判断是否允许通过

来自炫酷的 NutzCN

@wendal 我用了最新的b53,加上@SessionBy(ShiroSessionProvider.class)还是一样的。
页面上的session.CurrentUser已经过期了
并没有跳转
你说的ShiroProcessor在你的jar里 弱弱问一句 如何debug啊?

关联源码就可以打断点

来自炫酷的 NutzCN

我猜测的原因:

  1. 没有经过入口方法, 那么shiro的注解自然也不会生效
  2. 用了rememberMe, 自动登陆了,但没有经过realm,所以session里面没有你需要的值
  3. 没有配置ShiroProcessor, 所以shiro也不会生效

其实ajax也可以跳,关键是看你的shiro拦截后的跳转是什么样的,比如,shiro鉴权不过跳的是个403的页面,那么ajax返回类型json一定是报错的,那么就可以在

$.post().fail(function(){//这里来处理跳转})

@wendal
1、所有Shiro注解已经生效
2、remember me 禁用了
3、"org.nutz.integration.shiro.NutShiroProcessor"已经在动作链里配置。

@qq_74967e40 debug这个NutShiroProcessor, 看看为啥session过期了还能通过

@wendal 我跟了NutShiroProcessor的process方法,我发现在match是true(也就是说方法是被shiro控制?)的情况下
session过期,并没有引发任何异常

public void process(ActionContext ac) throws Throwable {
    	if (match) {
    		try {
    			Object cu = ac.getRequest().getSession().getAttribute("currentUser");
            	System.out.println("session:"+cu);//cu=null
            	Object cu2 = SecurityUtils.getSubject().getSession(true).getAttribute("currentUser");
            	System.out.println("session:"+cu2);//cu2=null
            	interceptor.assertAuthorized(new NutShiroInterceptor(ac));
            } catch (Exception e) {
                System.out.println(e.getMessage());//无打印
            	whenException(ac, e);
                return;
            }
    	}
        doNext(ac);
    }

@wendal 我手动抛了一个没有权限的异常,暂时OK,观察中。。
不过有个小问题。
我后台重编译一下,eclipse页面就404,需要清空浏览器缓存才行。。。
因为shiro操作了cooki记录了什么吗?

@wendal 还有个小建议。。
每次我发帖 都要白屏几秒钟。。。
是我网速的问题吗?

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