![](/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.