定义自定义事件/操作/请求,以便在Java Web App中重置会话超时计时器?

定义自定义事件/操作/请求,以便在Java Web App中重置会话超时计时器?,java,session,tomcat,request,session-timeout,Java,Session,Tomcat,Request,Session Timeout,我在eclipse中为我的Web应用程序使用Tomcat7.0、Spring4.0.2和Web模块3.0。我在app/web.xml和tomcat/conf/web.xml中配置了会话超时 <session-config><session-timeout>30</session-timeout></session-config> 30 我知道tomcat必须重置它的内部计时器来计算这30分钟,并在某些事件/操作/请求上使会话(会话超时)无效 我

我在eclipse中为我的Web应用程序使用Tomcat7.0、Spring4.0.2和Web模块3.0。我在app/web.xml和tomcat/conf/web.xml中配置了会话超时

<session-config><session-timeout>30</session-timeout></session-config>
30
我知道tomcat必须重置它的内部计时器来计算这30分钟,并在某些事件/操作/请求上使会话(会话超时)无效

我每5分钟发送一个名为captureLastActiveTimeForCurrentFile的请求。所以现在应用服务器将永远不会使会话无效,因为我每5分钟发送一次请求,所以它将每5分钟重置一次会话超时计时器

现在我的问题是如何忽略任何特定的请求(这里,captureLastActiveTimeForCurrentFile)来重置会话超时计时器。这意味着当我发送CaptureLastActiveTimeorCurrentFile请求时,服务器不能重置其计时器。对于所有其他请求,它应该按照它已经在工作的方式工作。所以,假设我不向服务器发送任何其他请求(不包括captureLastActiveTimeForCurrentFile),则必须在30分钟后使会话无效

我能想到的解决方案是:
-->我将在web.xml文件中配置很长时间的会话超时。
-->在服务器上的每个请求调用之后,我将在一个全局变量中捕获上次请求时间,不包括captureLastActiveTimeForCurrentFile
-->我将启动自己的计划程序,每5分钟运行一次,它将检查上次请求时间-当前时间>30分钟,然后我将手动使会话无效。

但我认为这个解决方案很复杂,性能方面也不是一个好主意

是否有其他方法可以在服务器上配置排除的请求,以便服务器忽略该特定请求

如果我的任何假设是错误的,请纠正我。
提前谢谢。任何帮助都将不胜感激。

如果captureLastActiveTimeForCurrentFile背后的代码没有显式访问用户的HTTP会话(即通过调用request.getSession()),那么您可以通过在Tomcat中设置一些属性来忽略对此路径的请求。但是请注意,设置这些将为没有显式访问用户会话的任何其他映射引入类似的行为

有关物业包括:

org.apache.catalina.core。StandardHostValve.ACCESS\u会话 org.apache.catalina.STRICT\u SERVLET\u法规遵从性

请参阅此处的进一步讨论,特别是最后一篇文章:


谢谢你的回复@AlanHay,你给了我一个想法,让我从另一个方向思考。我试着去理解这些财产是怎么说的。我理解tomcat的默认行为:
如果我没有通过特定请求显式使用会话,tomcat将不会在会话的最后访问时间计算该请求的时间。
但它不起作用:(我理解错了吗?这里是。如果可能,请帮助我解决此问题。请参阅: