![](/img/trans.png)
[英]How to maintain the same session id across multiple web applications in Java
[英]How to set session timeout dynamically in Java web applications?
我需要为我的用户提供一个Web界面来更改会话超时间隔。 因此,Web应用程序的不同安装可以为其会话设置不同的超时,但是它们的web.xml
不能有所不同。
有没有办法以编程方式设置会话超时,以便我可以使用ServletContextListener.contextInitialized()
来读取配置的间隔并在应用程序启动时设置它?
非常感谢。
不使用ServletContextListener,而是使用HttpSessionListener
。
在sessionCreated()
方法中,您可以以编程方式设置会话超时 :
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event){
event.getSession().setMaxInactiveInterval(15 * 60); // in seconds
}
public void sessionDestroyed(HttpSessionEvent event) {}
}
并且不要忘记在部署描述符中定义侦听器 :
<webapp>
...
<listener>
<listener-class>com.example.MyHttpSessionListener</listener-class>
</listener>
</webapp>
(或者从Servlet 3.0版起,您可以使用@WebListener
注释)。
不过,我建议为每个应用程序创建不同的web.xml文件,并在那里定义会话超时:
<webapp>
...
<session-config>
<session-timeout>15</session-timeout> <!-- in minutes -->
</session-config>
</webapp>
有没有办法以编程方式设置会话超时
基本上有三种方法来设置会话超时值:
web.xml
文件中使用session-timeout
~或〜 session-timeout
值(从而在服务器级别配置它)〜或〜 HttpSession. setMaxInactiveInterval(int seconds)
编程方式HttpSession. setMaxInactiveInterval(int seconds)
Servlet或JSP中的HttpSession. setMaxInactiveInterval(int seconds)
方法。 但请注意,后一个选项设置当前会话的超时值,这不是全局设置。
正如另一个告诉你的那样,你可以改变一个会话监听器。 但是,您可以直接在servlet中更改它。
getRequest().getSession().setMaxInactiveInterval(123);
我需要为我的用户提供一个Web界面来更改会话超时间隔。 因此,Web应用程序的不同安装可以为其会话设置不同的超时,但是它们的web.xml不能有所不同。
您的问题很简单,您需要会话超时间隔应该在运行时可配置,配置应该通过Web界面完成,不应该有重启服务器的开销。
我正在扩展迈克尔斯的答案来解决你的问题。
逻辑 :您需要将配置的值存储在.properties文件或数据库中。 在服务器上启动读取该存储的值并复制到变量使用该变量,直到服务器为UP。 由于config也更新了更新变量。 而已。
在MyHttpSessionListener类中1.创建一个名为globalSessionTimeoutInterval的静态变量。
创建一个静态块(仅在第一次访问类时执行)并从config.properties文件读取超时值并将值设置为globalSessionTimeoutInterval变量。
现在使用该值设置maxInactiveInterval
现在Web部分即管理员配置页面
一个。 将配置的值复制到静态变量globalSessionTimeoutInterval。
湾 将相同的值写入config.properties文件。 (考虑重新启动服务器,然后将使用config.properties文件中存在的值加载globalSessionTimeoutInterval)
备用.properties文件或将其存储到数据库中。 选择是你的。
实现相同的逻辑代码
public class MyHttpSessionListener implements HttpSessionListener
{
public static Integer globalSessionTimeoutInterval = null;
static
{
globalSessionTimeoutInterval = Read value from .properties file or database;
}
public void sessionCreated(HttpSessionEvent event)
{
event.getSession().setMaxInactiveInterval(globalSessionTimeoutInterval);
}
public void sessionDestroyed(HttpSessionEvent event) {}
}
在配置控制器或配置servlet中
String valueReceived = request.getParameter(timeoutValue);
if(valueReceived != null)
{
MyHttpSessionListener.globalSessionTimeoutInterval = Integer.parseInt(timeoutValue);
//Store valueReceived to config.properties file or database
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.