我正在尝试显示会话将在shiro基于我的应用程序中超时对话框,这是我尝试的代码,但尚无法解决…
shiro
<% Subject user = SecurityUtils.getSubject(); Session usersession = user.getSession(true); if(user.isAuthenticated()){ Date startTime = usersession.getStartTimestamp(); //login time Date lastAccessTime = usersession.getLastAccessTime(); //last active time Date currentTime = new Date(); // current time long diffInSec = (currentTime.getTime()- lastAccessTime.getTime())/1000 ; // calculate idle time of user long timeout = (long)(usersession.getTimeout()* 0.001); // get sessiontime out in seconds long oneMinleft = timeout - 60 ; // get time to show timeout dialog before 1 min of session timeout System.out.println("startTime :"+startTime); System.out.println("lastAccessTime :"+lastAccessTime); System.out.println("currentTime :"+currentTime); System.out.println("diffInSec :"+diffInSec); System.out.println("Timeout:"+timeout); System.out.println("Seconds left to timeout:"+oneMinleft); System.out.println(); if(diffInSec >= oneMinleft){ %> <script type="text/javascript"> showTimeout(); // show dialog </script> <% } } %>
任何帮助表示赞赏
感谢和问候
您的问题是您正在JSP中执行此操作,因此当用户发出请求时它会被执行,因此它不会空闲,并且会话超时会重新启动。您可能会在javascript中执行类似的操作,因此当用户什么都不做时,时间就会流逝。
您可以通过以下方式混合使用JSP和javascript:
setTimeout(function(){showTimeout()},<%= session.getMaxInactiveInterval() - 60*1000 %>);
您不需要lastAccessTime,因为您知道出席请求时它始终为0。