读书人

spring security deault login amp; jque

发布时间: 2012-09-03 09:48:39 作者: rapoo

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>

读书人网 >软件架构设计

热点推荐