首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring security deault login & jquery layout 的有关问题-http://yaofeng911.javaeye

2012-09-03 
spring security deault login & jquery layout 的问题--http://yaofeng911.javaeye.com/使用spring secur

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> 

热点排行