精华内容
下载资源
问答
  • shiro中如何检测session失效、退出等事件 前言 我们知道shiro是一个优秀的web权限管理的优秀框架,shiro中实现了对用户登录、资源访问控制等功能,使用shiro能够我们的应用web系统更加安全,同时降低了自己开发...

    shiro中如何检测session失效、退出等事件

    前言

    我们知道shiro是一个优秀的web权限管理的优秀框架,shiro中实现了对用户登录、资源访问控制等功能,使用shiro能够让我们的应用web系统更加安全,同时降低了自己开发一套权限管理系统的代价;本篇文章想向读者介绍的是我们如何在使用shiro框架时,实现对用户session登录、登出等事件的监听,以便应用系统更好的实现对用户事件的管理。

    一、shiro中的session是什么?

    首先我们要明确shiro中的session和传统的httpSession不是一个东西,shiro中的session是shiro框架自己实现的一个用户会话管理器,做到和httpSession一样存储登录用户信息,用户登出后清除等功能。
    如果在shiro框架中实现对session的管理和控制,需要我们自己实现sessioinManager,即session会话管理类,本文引用的是shiro框架中包含的一个基础的会话管理功能作介绍,抛砖引玉,读者可以根据它的使用方式定义更多功能自己的实现类。

    二、使用代码

    1.自定义sessionManager

    @Bean
        public SessionManager memeryManager(
                @Qualifier(value = "memoryCacha")
                CacheManager cacheManager) {
            DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
            sessionManager.setSessionDAO(new MemorySessionDAO());
            sessionManager.setCacheManager(cacheManager);
            // 局会话超时时间(单位毫秒),默认30分钟
            sessionManager.setGlobalSessionTimeout(sessionTimeOut * 1000);
            sessionManager.setSessionValidationInterval(sessionTimeOut * 1000);
            // 取消登录成功后url 后面的 JSESSIONID
            sessionManager.setSessionIdUrlRewritingEnabled(false);
            // 删除过期的session
            sessionManager.setDeleteInvalidSessions(true);
            // 定时检测session过期,10s检测一次
            sessionManager.setSessionValidationSchedulerEnabled(true);
            ExecutorServiceSessionValidationScheduler validationScheduler = new ExecutorServiceSessionValidationScheduler(
                    sessionManager);
            validationScheduler.setInterval(sessionInterval);
            sessionManager.setSessionValidationScheduler(validationScheduler);
            sessionManager.setSessionListeners(Collections.singleton(listener));
            return sessionManager;
        }
    

    2.代码运行效果

    在这里插入图片描述

    总结

    如下我们就实现了对shiro的session进行活动监控,这样我们可以实现用户自动登出、登出后的相关信息清除。可通过
    shiroFilterFactoryBean.getFilters().put("authc", new BaseFormAuthenticationFilter()); 控制session失效后页面跳转地址或做其他的pv/uv统计操作。

    展开全文
  • 我们设置SESSION失效的时间,是为了确保在用户长时间不与服务器交互的情况下,可以自动退出登录。本文介绍了三种设置SESSION失效的方法,希望对你有帮助。 Session对象是HttpSessionState的一个实例。该类为当前用户...

       我们设置SESSION失效的时间,是为了确保在用户长时间不与服务器交互的情况下,可以自动退出登录。本文介绍了三种设置SESSION失效的方法,希望对你有帮助。
       Session对象是HttpSessionState的一个实例。该类为当前用户会话提供信息,还提供对可用于存储信息会话范围的缓存的访问,以及控制如何管理会话的方法。下面介绍设置session失效的几种方法。

      在系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。

      具体设置很简单,方法有三种:

     

       (1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。

      这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。

      (2)也是比较通用的设置session失效时间的方法,就是在项目的web.xml中设置

      <!-- 设置session失效,单位分 -->

      <session-config>
              <session-timeout>1</session-timeout>
          </session-config>

      (3)直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中找到<session-config>元素,tomcat默认设置是30分钟,只要修改这个值就可以了。

      需要注意的是如果上述三个地方如果都设置了,有个优先级的问题,从高到低:(1)>(2)>(3)
       在一般系统中,也可能需要在session失效后做一些操作,

      (1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。

      (2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了。

      那么如何在session失效后,进行一系列的操作呢?

      这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。

      监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法
       自己可以继承这个类,然后分别实现。
       sessionCreated指在session创建时执行的方法
       sessionDestroyed指在session失效时执行的方法

    给一个简单的例子:
      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中声明就可以了

      <listener>
    <listener-class>com.demo.SessionListener</listener-class>
    </listener>

    转载于:https://www.cnblogs.com/CielWater/p/3222505.html

    展开全文
  • llzzcc66   知道合伙人数码行家 ...方式5:等待session失效 优点:你可以不用做任何工作 缺点:用户可以在你等待的这段时间内重新登录 转载于:https://www.cnblogs.com/guiyishanren/p/11067867.html
    llzzcc66 
    知道合伙人数码行家 推荐于2018-08-10
     
    如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程、死机等),服务器无法处理用户退出网站的请求,解决方式如下:

    方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出
    优点:能在短时间内判断出用户是否已经退出 缺点:增加用户请求次数,所消耗的服务器资源较大

    方式2:使用cookie保存用户登录信息,不要设置cookie的过期时间,当关闭浏览器时,cookie会自动过期
    优点:处理方便 缺点:用户浏览器不一定支持cookie,也就无法实现该方式

    方式3:在页面中添加onunload事件,当关闭浏览器时,自动跳转到“退出”页面(loginout.action)
    优点:退出时,能及时进行处理 缺点:当用户打开多个页面时,关闭任何一个页面都有可能导致用户的退出

    方式4:记录用户的每次操作时间(包括页面刷新、提交表单等),在数据库中用作业每隔一段时间检查上次的操作时间,当操作时间大于一定的数值时,就认为该用户已经退出
    优点:无论哪种非正常退出,都能够进行处理 缺点:进行检查的时间间隔不容易确定,如果用户在线,当长时间未操作,也会认为用户已经退出

    方式5:等待session失效
    优点:你可以不用做任何工作 缺点:用户可以在你等待的这段时间内重新登录

    转载于:https://www.cnblogs.com/guiyishanren/p/11067867.html

    展开全文
  • 过滤器中已判断出session失效,并跳转回登录界面,但如何...... 过滤器中已判断出session失效,并跳转回登录界面......但登录界面是嵌在框架中的,如何在过滤器中实现登录界面显示成整个页面,或者关闭浏览器,...
    过滤器中已判断出session失效,并跳转回登录界面,但如何......
    过滤器中已判断出session失效,并跳转回登录界面......但登录界面是嵌在框架中的,如何在过滤器中实现让登录界面显示成整个页面,或者关闭浏览器,重新打开一个窗口,要在过滤器中实现。

    ------解决方案--------------------
    你在页面中将target设置成_top就可以了
    ------解决方案--------------------
    如果是框架的子框架,那么session退出登录后登录页面显示全屏用js实现方法如下:window.parent.location = '/index.jsp ';//本页面(子框架)的父(整个框架)装载url
    展开全文
  • 我现在有个子系统集成了CAS,访问地址为:...当服务端session失效时候,我想它跳转到这个地址:http://localhost:8080/myCAS/login?service=http://localhost:8080/myPortal/cas 请问大神们,该如何处理?万分感谢
  • 在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个...每个页面都要调用和设置登陆页面路径,所以实际应用就放弃了这一想法后来考虑到不如写一个检查Session失效的页面,由客户端每一秒都刷新一下,
  • cookie固然好,不过有些客户端浏览器会禁用cookie,这就会导致你所依赖cookies的程序会失效或出错,那么若真出现用户关闭cookies的情况,PHP应该如何再次使用session?方法还是有的。 1、设置php.ini的session.use_...
  • 【PHP】session失效时间

    2015-07-02 15:30:00
    后来在网上查询时,发现这个问题还真是有点普遍,网上也有关于这个问题的面试问题,如:如何严格限制session在30分钟后过期!这个问题的答案顺便也写在这里1.设置客户端cookie的lifetime为30分钟;2.设置session的...
  • 最近项目需求:要求当关闭浏览器(关闭页签另说,比较复杂,这里挖个坑,到时候再填)或session失效用户自动退出,也就是此时要修改数据库用户状态。 如何做呢?这里用到session监听器。当session因各种原因失效...
  • php中session时间设置详解1... 客户端没有禁止Cookie(1)使用session_set_cookie_params()设置 Session失效时间,此函数是 Session 结合 Cookie设置失效时间。如果要 Session 在一分钟后失效,其代码示例如下所示:...
  • Feign转发请求头,(防止session失效) 微服务开发中经常有这样的需求,公司自定义了通用的请求头,需要在微服务的调用链中转发,比如在请求头中加入了token,或者某个自定义的信息uniqueId,总之就是自定义的一个...
  • 在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题。后来,看到 session 失效的拦截器代码,就猜想能否通过拦截器来实现。查资料...
  • 分布式如何实现session共享

    万次阅读 多人点赞 2017-02-25 21:40:22
    最近,在工作中遇到一个问题,问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那么用户在session失效之前如果再次使用app,那么可能会被路由到server2,这时问题...
  • 在微服务开发中,如何让多个微服务之间的session共享,如:登录的账号或其他信息需要保存到session中,但是不使用全局session肯定其他的微服务不能调用 我们的目的:让微服务A保存的sesion在微服务B中也能获取 ...
  • 在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题。  后来,看到 session 失效的拦截器代码,就猜想能否通过拦截器来实现。 ...
  • 一般情况下,用户关闭客户端IE时,不会马上执行Session_End事件,而是等Session失效时才会执行Session_End事件,如果想要关闭IE,马上执行Session_End事件可以参考如下方法: 在窗体添加脚本 <script language=...
  • 比如通过后台,删除某个session该用户登录状态失效补充:是不同会话之间操作session,可能只知道username这样的值。回复内容:比如通过后台,删除某个session该用户登录状态失效补充:是不同会话之间操作...
  • 这些操作,之后返回到登录页面,但点击浏览器的后退按钮后又返回到退出之前的页面,如何让浏览器的退出按钮失效,让他继续停留在登录页面。 [b]问题补充:[/b] 但是页面好多,不能每个页面都加对session的判断啊 有...
  • 我们已经知道如何使用session了,但...Session值清空在java中,session清空有着这么两种情况:1.session.removeAttribute("sessionname")用来清除SESSION中某个属性.2.session.invalidate()让SESSION失效.我们可以使...
  • 最近,在工作中遇到一个问题,问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那么用户在session失效之前如果再次使用app,那么可能会被路由到server2,这时问题...
  • 分布式session共享 集群Session共享

    千次阅读 2018-08-06 17:33:54
    最近,在工作中遇到一个问题,问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那么用户在session失效之前如果再次使用app,那么可能会被路由到server2,这时问题...
  • 序列化保存session

    2018-10-19 09:46:16
    session id 是由服务器在客户端连接后自动分配的。...如何让session在服务器重新启动后保持有效呢?可以在服务器关闭之前序列化保存session到文件中,然后在重启服务器后,从指定文件中反序列化session。...
  • session原理及实现共享

    2018-01-23 10:14:11
    最近,在工作中遇到一个问题,问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那么用户在session失效之前如果再次使用app,那么可能会被路由到server2,这时问题...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

如何让session失效