shyboy0358
shyboy0358
2014-07-13 00:05
采纳率: 0%
浏览 1.3k
已采纳

shiro登陆超时的问题

项目中登陆用到了shiro验证框架,session超时,shiro默认会迁移到登陆画面。现在想session超时想弹出一个对话框,不知该如何解决。




<bean id="dmpSessionListener" class="com.pactera.platform.reqm.web.util.DmpSessionListener"/> 

public class DmpSessionListener implements SessionListener{

@Override
public void onStart(Session session) {
    // TODO Auto-generated method stub
    System.out.println("onStart");

}

@Override
public void onStop(Session session) {
    // TODO Auto-generated method stub
    System.out.println("onStop");       
}

@Override
public void onExpiration(Session session) {
    // TODO

}

}
查了一下,有个监听session超时的方法,可是监听到应该怎样弹对话框呢,前台开发不熟悉。请大家赐教。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • iteye_18867
    iteye_18867 2014-07-14 09:26
    已采纳

    这里不是使用监听 思路都一样,简单说下:
    如果你使用的是FormAuthenticationFilter,那么继承FormAuthenticationFilter覆盖onAccessDenied方法,方法实现:
    [code="java"] if (isLoginRequest(request, response)) {
    if (isLoginSubmission(request, response)) {
    return executeLogin(request, response);
    } else {
    return true;
    }
    } else {
    if(AjaxUtils.isAjaxRequest(WebUtils.toHttp(request))){
    HttpServletResponse res = WebUtils.toHttp(response);
    res.sendError(HttpServletResponse.SC_UNAUTHORIZED);

                }else{
                    redirectToLogin(request, response);
                }
    

    // saveRequestAndRedirectToLogin(request, response);
    return false;
    }[/code]
    然后前台设置ajax全局状态码处理 捕获401,给出提示或做进一步处理
    资源权限和角色权限同样可以使用这种方式!我想我说的够清楚了!

    点赞 评论
  • De_Moivre
    De_Moivre 2014-07-13 02:03

    在页面上记录一个时间, 然后用javascript去判断, 如果session失效时间快到了, 用户还没和server交互过,那就弹出一个对话框.
    [code="java"]


    <br> var sessionTime=5;<br> var intvalue=1;<br> function start(){<br> intvalue ++;<br> document.getElementById(&quot;demo&quot;).innerHTML=&quot;&nbsp;&quot; + Math.floor(((sessionTime-intvalue)/60)).toString()+&quot;分&quot;+((sessionTime-intvalue)%60).toString()+&quot;秒&quot;;<br> if(intvalue&gt;=sessionTime){<br> end();<br> }<br> }<br> function end(){<br> alert(&quot;时间到了!!&quot;);<br> window.location.href=&quot;<a href="http://www.baidu.com">http://www.baidu.com</a>&quot;;<br> }</p> <pre><code>window.setInterval(&quot;start()&quot;,1000); </code></pre> <p>[/code]
    点赞 评论
  • ck504323276
    ck504323276 2014-07-14 09:23

    首先,完全没有必要给这个提示,你想想,如果用户打开了10个页面,session过期了,
    10个窗口都会弹出这个,用户要关闭弹出框10次,体验度太差了。我是到现在都没见过有网站会这样弄的。
    你顶多在页面跳转到登录之前给他个超时的提示。

    点赞 评论

相关推荐