如何在 shiro 中弹出一个屏幕来警告会话超时?

Posted

技术标签:

【中文标题】如何在 shiro 中弹出一个屏幕来警告会话超时?【英文标题】:How to have a pop-up screen to warn that the time out of the session is over in shiro? 【发布时间】:2016-10-24 12:50:58 【问题描述】:

我有我的 shiro 项目,我需要在关闭不活动超时时弹出警告用户会话将关闭的弹出窗口。目前我有 shiro 和 Servlet 容器

【问题讨论】:

【参考方案1】:

尝试使用 javascript 在计时器到期后显示弹出窗口,此处 timeout 存储超时期限,现在运行计时器并在计时器到期后显示弹出窗口。下面的演示代码,但您必须自定义它,它不是完整的代码。

      var timeout=<%= currentUser.getSession().getTimeout() %>;
      var starttimer=timeout-60000; //+100000000;
      var timerstep=1;//In  minutes
      var alertbefore=5;//In minutes
      var logoutUrl="logout";//Url to logout
      var militimerstep=timerstep*60*1000;
      var sessionNoExpireMessage="Session will never expire!!!";

var sess_timer=window.setInterval(updateTimer,militimerstep);
    $("#timeout_timer").html(moment.duration(parseInt(starttimer,10)).humanize(true) + " remaining ");
    if(timeout<0)
    
        clearInterval(sess_timer);
        $("#timeout").html(sessionNoExpireMessage+ " remaining ");
    else
        $("#timeout").html( moment.duration(parseInt(starttimer,10)).humanize() + " remaining");
    
    function updateTimer()
    console.log("In timer");
   // alert(timeout);
    if(timeout<0)
        
            clearInterval(sess_timer);
            $("#timeout").html(sessionNoExpireMessage);
            return false;
        

        starttimer = starttimer-militimerstep;
        $("#timeout").html(moment.duration(parseInt(starttimer,10)).humanize() + " remaining");
        $("#timeout_timer").html(moment.duration(parseInt(starttimer,10)).humanize(true));
        if(starttimer<=0)
            window.location.replace("$pageContext.request.contextPath/"+logoutUrl);
            window.location("$pageContext.request.contextPath/"+logoutUrl);
        
        if(starttimer<alertbefore*60*1000)
            $("#session_alert").modal();
        
    

    function updateSessionInfo()
         if(timeout<0)
        

            return false;
        
        ajaxCount--;
        resetajaxView();
        starttimer=timeout-60000;
        $("#timeout").html(moment.duration(parseInt(starttimer,10)).humanize() + " remaining");
        $("#timeout_timer").html(moment.duration(parseInt(starttimer,10)).humanize(true));
    

【讨论】:

以上是关于如何在 shiro 中弹出一个屏幕来警告会话超时?的主要内容,如果未能解决你的问题,请参考以下文章

带有警告的 PHP/Javascript 会话超时

在会话超时之前警告用户

shiro 中的 JSF 更改会话超时

如何在颤动中弹出到特定屏幕

如何使用JQuery和ColdFusion处理会话超时警告?

JSF 2 + Spring 3 + Shiro - 会话超时不重定向到登录页面