我的应用程序使用struts2 + spring + hibernate,我正在做一些session-interceptor-login-authorization系统,它的工作正常,现在我尝试实现会话过期的部分,我遇到了问题: 首先,会话拦截器检查每个请求以查看用户是否在会话中,如果没有,则将其重定向到登录页面,否则它将通过所请求的操作。
因此,如果用户刚刚启动应用程序,则会弹出登录页面
如果会话由于web.xml中的session-timeout属性而超时,则会重定向到登录页面
现在我有一个请求显示会话过期消息。 所以我决定使用app范围并设置一些变量,如UserLoggedIn 现在回到拦截器我可以检查用户是否在会话中,如果它的null检查变量UserLoggedIn的应用范围,那么如果建立则会话已过期(sessionExpired.jsp),否则为login.jsp。 问题是每当我关闭浏览器并重新打开它时,应用程序范围仍然存在,而UserLoggedIn变量也是如此,所以我想说我要启动浏览器和我的应用程序 所以会话拦截器它解雇了它没有在会话GReat上找到用户!但它找到了UserLoggedIn变量,它告诉这不是一个全新的开始,所以会话过期消息弹出。我知道它有点令人困惑我不知道这是否是正确的方式来做这个会话过期的事情;这是我的第一次尝试。
任何建议,替代方法等都将非常感激
pd:我知道有更好的方法来保护您的应用程序,如弹簧安全性 我投入了2天但失败了,由于时间因素,我不能继续尝试它
答案 0 :(得分:1)
将会话时间移动到它自己的拦截器可能更容易,也就是每次使用拦截器时,如果调用之间的时间值太大,您将被重定向到用户,它将为用户设置时间值会话超时页面。毕竟会话告诉你它是陈旧的,所以你应该能够避免应用程序级逻辑。