我需要给我的用户一个Web界面来更改会话超时间隔。 因此,Web应用程序的不同安装对其会话可以具有不同的超时,但是它们的web.xml不能相同。
您的问题很简单,您需要在运行时配置会话超时间隔,并且应该通过Web界面进行配置,并且不应该有重启服务器的开销。
我正在扩展迈克尔斯的答案,以解决您的问题。
逻辑:您需要将配置的值存储在.properties文件或数据库中。 在服务器启动时,读取该存储的值并使用该变量复制到变量,直到服务器启动。 由于config是更新的,更新变量也是如此。而已。
说明
在MyHttpSessionListener类中1.创建一个名称为globalSessionTimeoutInterval的静态变量。
创建一个静态块(仅在第一次访问类时执行),并从config.properties文件中读取超时值,并将其值设置为globalSessionTimeoutInterval变量。
现在使用该值设置maxInactiveInterval
现在是Web部件,即“管理员配置”页面
一个。 将配置的值复制到静态变量globalSessionTimeoutInterval。
b。 将相同的值写入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) {}
}
并在您的Configuration Controller或Configuration servlet中
String valueReceived = request.getParameter(timeoutValue);
if(valueReceived != null)
{
MyHttpSessionListener.globalSessionTimeoutInterval = Integer.parseInt(timeoutValue);
//Store valueReceived to config.properties file or database
}