我在eclipse中使用Tomcat 7.0,Spring 4.0.2,Web Module 3.0作为我的Web应用程序。我在app / web.xml以及tomcat / conf / web.xml中配置了会话超时。
<session-config><session-timeout>30</session-timeout></session-config>
我知道tomcat必须重置它的内部计时器才能计算这30分钟,并使某些事件/动作/请求的会话(会话超时)无效。
我每隔5分钟发送一个名为 captureLastActiveTimeForCurrentFile 的请求。所以现在应用服务器永远不会使会话无效,因为我每隔5分钟发送一次请求,所以它会在每5分钟后重置一次会话超时定时器。
现在我的问题是如何忽略任何特定请求(此处为 captureLastActiveTimeForCurrentFile )以重置会话超时计时器。这意味着当我发送 captureLastActiveTimeForCurrentFile 请求时,服务器不能重置它的计时器。对于所有其他人的请求它应该工作,因为它是如何工作的。因此,如果我不向服务器发送任何其他(不包括 captureLastActiveTimeForCurrentFile )请求,则必须在30分钟后使会话无效。
我能想到的解决方案:
- &GT;我将在web.xml文件中配置会话超时很长时间
- &GT;在服务器上的每次请求调用之后,我将在一个全局变量中捕获上次请求时间,不包括 captureLastActiveTimeForCurrentFile
- &GT;我将启动自己的调度程序,该调度程序将在每5分钟后运行,它将检查上次请求时间 - 当前时间&gt; 30分钟,然后我将手动使会话无效。
但我认为这个解决方案很复杂,性能也不是一个好主意。
我是否可以通过其他方式在服务器上配置排除的请求,以便服务器忽略该特定请求。
如果我的任何假设是错误的,请纠正我。 提前致谢。任何帮助都会很感激。
答案 0 :(得分:1)
如果captureLastActiveTimeForCurrentFile背后的代码没有显式访问用户的HTTP会话(即通过调用request.getSession()),那么您可以通过在Tomcat中设置一些属性来忽略对此路径的请求。请注意,设置这些将为未明确访问用户会话的任何其他映射引入类似的行为。
相关属性是:
org.apache.catalina.core。 StandardHostValve.ACCESS_SESSION org.apache.catalina.STRICT_SERVLET_COMPLIANCE
请参阅此处的进一步讨论,尤其是最后一篇文章:
http://tomcat.10.x6.nabble.com/Session-timeouts-ignore-quot-periodic-polling-quot-URL-td2159572.html