sessionlistener的鸡肋dwr

springboot之HttpSessionListener的用法创建,销毁 一.HttpSessionListener的作用 这个接口也只包含两个方法,分别对应于Session的创建和失效: # public void sessionCreated(HttpSessionEvent se);# public void sessionDestroyed(HttpSessionEvent se); 二.HttpSessionListener的触发机制 当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象 ,并触发 HttpSession创建事件 阅读详情

最近因为业务需要,需要给系web系统加了个session过期的监听功能,下面是代码:

web.xml配置:

 <session-config>
        <session-timeout>10</session-timeout>
 </session-config>

listener代码:
public class SessionListener implements HttpSessionListener {

         @Override
           public void sessionCreated(HttpSessionEvent arg0) {
              // TODO Auto-generated method stub            
           }

         @Override
           public void sessionDestroyed(HttpSessionEvent arg0) {
                    // TODO Auto-generated method stub
                    HttpSession session = arg0.getSession();
                   UserTab user = (UserTab)session.getAttribute("USER");
                  if(user!=null){
                         自己需要做的其他操作
                   }
         }

}

好啦,到这就完成了,大功告成,启动猫,在10分钟后死活不见触发sessionDestoryed的方法,坏了,我一个想法就是肯定和web里的什么东东冲突了,然后在web.xml发现dwr的配置,

<servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>
    org.directwebremoting.servlet.DwrServlet
   </servlet-class>
 <init-param>    
    <init-param>
      <param-name>activeReverseAjaxEnabled</param-name>
      <param-value>true</param-value>
    </init-param>   
  </servlet>
  <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>

于是先把dwr的配置注释掉,走你猫,10分钟后,期盼已久的sessionDestoryed方法终于有了动静,好像现在基本可以确定是和dwr有关系了。以前用过dwr也看过源码,记着dwr的底层也是依赖servlet地,赶紧download一份源码看看,果然就是,于是在dwr的配置释放出来,在里面加上scriptSessionTimeout这个参数,也设成10分钟,我想这下应该没有问题了吧,满心欢喜的启动猫,10分钟后,我去,再次崩溃,还是不触发sessionDestoryed方法,各种怀疑人生,这次又是哪里出现了问题,于是怀疑到init-param的这个初始化参数activeReverseAjaxEnabled,去掉参数后,能正常进入dessiondestoryed,但是猫启动的时候我发现一个错误:Polling and Comet are disabled. To enable them set the init-param activeReverseAjaxEnabled to true,再试dwr得消息推送,我去也用不成了,这下进退两难了,去掉activeReverseAjaxEnabled参数,dwr用不成了,不去掉sessionlistener又不触发,我勒个去,咋整啊,就算activeReverseAjaxEnabled参数不影响,dwr的推送间隔时间也远远小于session的失效时间,这样还是不会使session失效,除非是dwr的推送间隔时间大于session的失效时间才行,这样又和业务违背,最后在自定义的拦截器中添加了一段时间拦截并计算的功能,由于session彼此独立,只需要记录每个用户第一个访问系统的时候就行了,代码如下:

 

          //记录session每次活动的最后时间
         request.getSession().setAttribute("cross_time", System.currentTimeMillis());
 

然后在filter中拦截每次访问的action地址,取出配置文件中的配置的过期时间,再取系统当前时间减掉当前用户第一次登陆时记录的时间,比较一下如果大于配置的过期时间,就提示过期,然后跳转到登录页面,同时invalidate当前session,清除其中所以得变量,代码如下:

*****sessiontime.properties为配置session过期时间的properties文件

FileInputStream fis=new FileInputStream(this.getClass().getClassLoader().getResource("").getPath()+"/sessiontime.properties");
Properties pro= new Properties();
pro.load(fis);
String session_time_out =pro.getProperty("session_time");

if(StringHelp.isNotNull(session_time_out)){
 long cross_time = Long.parseLong(request.getSession().getAttribute("login_time").toString());
 if(((System.currentTimeMillis()-cross_time)/1000)>(Long.parseLong(session_time_out)*60)){
  request.getSession().invalidate();
  request.getSession().setAttribute("msgStr","会话过期,请重新登录");
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter writer = response.getWriter();
  writer.write("<script type='text/javascript'>window.top.location.href='"+contextPath+"/index.jsp;'</script>");
  writer.flush();
  writer.close();
  return;
 }
}

经测试,符合需求要求的功能,算是解决了这个问题,但我总觉得不完美,如果哪位童鞋有更好的办法,请留言告知,不胜感激,相互学习一下。

shiro会话管理 Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性。 所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。 基础组件 1.1 Se... 阅读详情

相关推荐

多标签分类怎么做?(Python)

首先简单介绍下,多标签分类与多分类、多任务学习的关系: 多分类学习(Multi-class):分类器去划分的类别是多个的,但对于每一个样本只能有一个类别,类别间是互斥的。例如:分类器判断这只动物是猫、狗、猪,每个样本只能有一种类别,就是一个三分类任务。常用的做法是OVR、softmax多分类

y1282037271的博客 1359

Session超时后的事件监听处理

当session会话超时后,如果xu 1、创建UserSessionListener

vincent50411的专栏 5237

群晖设置公网ipv6方式域名解析访问

群晖、IPV6、域名解析

爬山虎的博客 2万+

第 8 章 配置listener监听器

第8章配置listener监听器 注意 还记得我们之前讲过的在线列表吗?第4.2节 “例子:在线列表”。我们曾经说过那个在线列表无法判断用户非法退出,很可能造成在线列表无限增大,现在我们可以用listener来弥补这一问题了。 如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章:第9章 封装taglib组件。...

weixin_33966365的博客 407

【Linux 驱动开发】STM32MP1 LCD 显示系统完整实践指南

STM32MP1 LCD显示系统实践指南 本文全面介绍STM32MP1平台实现MIPI DSI LCD显示的完整流程,涵盖硬件连接、设备树配置、显示原理和驱动实现。主要内容包括: 硬件连接:详细说明MIPI DSI差分对、背光PWM、复位/供电管脚的连接方式 设备树配置: PWM背光控制节点设置 LTDC与DSI端口映射关系 Panel节点参数定义 显示基础:讲解LCD/OLED显示原理、常见接口类型(RGB/LVDS/MIPI/HDMI)及信号时序 驱动实现。

猫猫的小茶馆 496

【立创开源】太阳能板充电方案单节3.7v锂电池充电

一直对太阳能板感兴趣,老是感觉充电好麻烦,要是放在那里就可以自己充电多好,所以尝试做了一个太阳能充电板。因为这几天都是阴天,所以测试效果不太好,但是下雨天也是能充电的,但是基本只能维持电量不掉,电压差不多4.2v以上,电流只有2mA。中午出太阳的时候,隔着玻璃放在太阳下测试,电流有12mA以上。能充起一点点电。等大晴天看一看能不能达到卖家说50mA。┗( T﹏T )┛感觉达不到。这个东西只能当一个玩具(;′⌒`)。不过如果汽车上一些行车记录仪加一个这个,汽车经常在太阳下停车,可能再也不用充电了。

贾saisai的博客 1万+

利用HttpSessionListener实现网站在线人数统计功能

  在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些缺点,例如:用户正常登录后,可能会忘记点击退出按钮,而直接关闭浏览器,导致计数器减1的操作没有及时执行;网站上还经常有一些内容是不需要登录就可以访问的,在这种情况下也无法使用上面的方法进行在线人数统计。  我

思考的虾米——公飞 2031

【Rcode】生存分析: KM & COX回归& 随机森林& nomogram

本文使用了R——survival包下的lung数据进行方法测试: 1)KM 2) Cox回归:多因素 3)随机森林因子(根据cox回归结果) 4)nomogram ( 根据cox回归结果,建立了中位生存时间,1年5年生存率的概率计算) -------------------????????‍♀️本文只有干货,非常干!????----------------------------- 一、数据加载 #生存分析 library("survival") library("survminer") data("

weixin_43172152的博客 9274

[转]session listener的配置和使用

在web.xml中增加listener的配置信息 <listener> <listener-class> com.SessionListener(实现session监听器接口的类的名字,包也要写上) </listener-class> </listener> ...

weixin_30414305的博客 380

【数据集】MODIS 的 MOD07 大气廓线产品概述及下载

MODIS 的 MOD07 大气廓线产品概述及下载

WW、forever的博客 551

华为OD机试真题2025双机位C卷 C++ 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 282

Session监听

Session监听 Servlet中用于实现session对象监听的监听器接口有HttpSessionListener、HttpSessionAttributeListener、 HttpSessionActivationListener和HttpSessionBindingListener、4个监听器接口。 HttpSessionListener :监听HttpSession对象的

zhupengqq的博客 686

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5949

Session监听器

session listener的配置和使用java 2009-12-04 10:54:51 阅读39 评论0 字号:大中小 在web.xml中增加listener的配置信息 com.SessionListener(实现session监听器接口的类的名字,包也要写上) ...

孤影在线 228

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Listener监听器----HttpSession对象的生命周期监听器

Listener监听器----如何创建一个能够监听HttpSession生命周期的监听器

阿土不土的博客 1473

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Listener系列教材 (三)- Session

这个文件是tomcat存放以前的session的,为了观察到创建session的活动,需要tomcat重启之前把以前的session都清除掉,才能观察到新创建session的活动。但是有的浏览器,即便是关闭了,下一次打开,也会发送以前sessionid到服务器,这样服务器就不会创建新的session。对Session的监听分生命周期的监听,和Session上Attribute变化的监听两种。如果是第一次访问,都会触发session创建,后续访问不会触发session的创建。所以需要等待才能观察到销毁。

MAGIC_LAN的博客 282

applicationListener和sessionListener使用实例

首先,我们知道web.xml 的加载顺序是:context-param -&gt; listener -&gt; filter -&gt; servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。所以没有办法使用注解的方式来获得bean。 这里写了一个applicationListener和sessionListener,代码如下: applica...

碌碌无为的小陈的博客 1158

shiro会话监听_Shiro的SessionListener

1、创建 session和销毁session的时机1、创建session的时候会附带着创建一个cookie,它的MaxAge为-1,也就是说只能存在于内存中。当浏览器端禁用cookie时,这个cookie依然会被创建。2、当浏览器提交的请求中有jsessionid参数或cookie报头时,容器不再新建session,而只是找到先前的session进行关联。这里又分为两种情况:1)使用jsessio...

weixin_39907591的博客 1160

HttpSessionListener监听器和HttpSessionAttributeListener监听器

和前面的ServletContextListener等一样,可以用于监控用户上线和离线。

weixin_74484843的博客 1734

Java for Web学习笔记(十九):Session(3)Session Listener

可以通过Listner来监听session的变化,这就是所谓的publish and subscribe模型。这是一种消息信息发布一方叫发布者,信息的接收方叫订阅者,实际也是事件驱动的高大上说法,订阅某个事件,然后触发处理。这种方式最大的作用是将进行session变化以及session变化后的处理进行,尤其适合于第三方代码(进行session变化

愷风(Wei)的专栏 2587

使用HttpSessionListener统计在线人数

session listener的配置和使用 在web.xml中增加listener的配置信息                             com.SessionListener(实现session监听器接口的类的名字,包也要写上)                                    com.AnotherSessionListener(有多个session监听器

vastskyjoe的专栏 7044

HttpSessionListener 的用法笔记250417

以下是关于 的用法详解,涵盖核心方法、实现步骤、典型应用场景及注意事项,帮助您全面掌握会话(Session)生命周期的监听与管理: 用于监听 HTTP 会话(Session)的创建与销毁,适用于跟踪用户会话状态(如在线用户统计)、会话级资源管理(如初始化用户数据)等场景。 当新会话(Session)创建时触发(如用户首次访问或调用 )。 当会话失效时触发(如超时、调用 或应用关闭)。 步骤 2:注册监听器 方式一:通过 配置 方式二:使用 注解 直接在类上添加注解(需支持 Servlet 3

kfepiza的博客 1277

javaweb之cookie、session、filter、listener

用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话。在客户端与服务器端交互的过程中,会产生一些数据。为了保存会话过程中产生的数据,在Servlet技术中,提供了两个用于保存会话数据的对象,分别是。一个网站怎么证明你来过?服务端给客户端一个信件(cookie),客户端下次访问服务端带上信件就可以了服务器登记你来过了,下次你来的时候我来匹配你(session)

梦想是很难很难的,所以先勇敢一点 593

sessionlistener方法中获取session中存储的值报空指针异常_从Golang实践中得到的教训...

当使用复杂的分布式系统时,可能会遇到并发处理的需求。我们知道golang的协程是处理并发的利器之一,加上Golang为静态类型和编译型使得其在企业中使用越来越广泛。Mode.net公司系统每天要处理实时,快速和灵活的以毫秒为单位动态路由数据包的全球专用网络和数据,需要高度并发的系统,而他们的动态路由就是使用Golang来构建的,本文我们介绍Mode.net在Golang构建分布式动态路由系统时的经...

weixin_39894914的博客 309

DWR框架实现服务器推送时的一个小问题

今天在用DWR框架做服务器推送小Demo的时候,遇到一个问题: 严重: Polling and Comet are disabled. To enable them set the init-param activeReverseAjaxEnabled to true. See http://getahead.org/dwr/server/servlet for more. 解决方法:

Dove_Knowledge的博客 681
上一篇: Servlet Listener原理
下一篇: 免安装版mysql的字符集配置问题
hello小先生
博客等级 码龄14年 2粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值