spring security deault login & jquery layout 的问题--http://yaofeng911.javaeye.com/
使用spring security时需要配置默认的登陆页面,就是在session失效或者其它原因需要登陆时的页面。
Xml代码 收藏代码
当使用类似于jquery layout页面框架时就会用登陆页面只显示在页面中某一个部分。
例如:整个页面用/startIndex.do加载mylayout.jsp, mylayout.jsp中分为上,左(menu),下,右(content),当session失效时,点击左的菜单,右面就会显示login.jsp. 这样是不合理的,
我一开始的解决方式,是自己写了filter ,但无论是自己写新的filter或才重写spring security的filter,始终首先显示是spring默认的页面。
其实只需要在login.jsp里加上js跳转就可以,其中两个地方需要注意:
1. 在login.jsp里直接写js它在session失效时不执行,可以使用jquery中执行:如
Js代码 收藏代码
在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。
具体设置很简单,方法有三种:
(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);
参数900单位是秒,即在没有活动15分钟后,session将失效。
这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。
(2)也是比较通用的设置session失效时间的方法,就是在项目的web.xml中设置
Xml代码 收藏代码Java代码 收藏代码 1. public class SessionListener implements HttpSessionListener{ 2. 3. public void sessionCreated(HttpSessionEvent event) { 4. HttpSession ses = event.getSession(); 5. String id=ses.getId()+ses.getCreationTime(); 6. SummerConstant.UserMap.put(id, Boolean.TRUE); //添加用户 7. } 8. 9. public void sessionDestroyed(HttpSessionEvent event) { 10. HttpSession ses = event.getSession(); 11. String id=ses.getId()+ses.getCreationTime(); 12. synchronized (this) { 13. SummerConstant.USERNUM--; //用户数减一 14. SummerConstant.UserMap.remove(id); //从用户组中移除掉,用户组为一个map 15. } 16. } 17. } public class SessionListener implements HttpSessionListener{ public void sessionCreated(HttpSessionEvent event) { HttpSession ses = event.getSession(); String id=ses.getId()+ses.getCreationTime(); SummerConstant.UserMap.put(id, Boolean.TRUE); //添加用户} public void sessionDestroyed(HttpSessionEvent event) { HttpSession ses = event.getSession(); String id=ses.getId()+ses.getCreationTime(); synchronized (this) { SummerConstant.USERNUM--; //用户数减一 SummerConstant.UserMap.remove(id); //从用户组中移除掉,用户组为一个map } }}
然后只需要把这个监听器在web.xml中声明就可以了
例如:
Xml代码 收藏代码
1. <listener>
2. <listener-class>
3. com.demo.SessionListener
4. </listener-class>
5. </listener>