我想在java應用程序中創建一個計時器,根據哪個用戶可以在預定義的時間內登錄到應用程序。一旦定時器值達到零,他/她將失去它的會話對象並自動註銷。代碼中的計時器
如果用戶在預定義時間內執行某些任務,他的會話時間將增加,否則他的時間將減少。一旦他達到預定義的低時間,他將無法再次登錄。
建議定時器對當前會話有影響的一些方法。
謝謝:)
我想在java應用程序中創建一個計時器,根據哪個用戶可以在預定義的時間內登錄到應用程序。一旦定時器值達到零,他/她將失去它的會話對象並自動註銷。代碼中的計時器
如果用戶在預定義時間內執行某些任務,他的會話時間將增加,否則他的時間將減少。一旦他達到預定義的低時間,他將無法再次登錄。
建議定時器對當前會話有影響的一些方法。
謝謝:)
免責聲明:
我可以看到一個與安全相關的理由做這樣的東西。我已經看過這種方法幾次和各種應用程序,所以我可以理解爲什麼這樣的要求可以提高。當然,我不認爲它是一個好主意來實現這樣的東西,但考慮到要求,我會分享我的想法並提供解決方案。
既然你在這裏討論會議,我假設你在網絡域中。
IMO有幾種方法可以解決這個問題。
假設,每個客戶都分配給它的HttpSession
:
一旦在創建該會話的第一個電話,就把「當前時間」走進去。然後創建一個Filter
,在第一個請求執行上述邏輯時,每次請求都將當前時間與第一個請求期間設置的時間進行比較。如果差異小於允許的時間 - 繼續執行,否則強制註銷,刪除會話和所有內容。我想用戶將被迫在此之後重新連接。
實施例:
比方說的用戶被允許登錄在10分鐘
在過濾器的任何後續請求然後(僞碼):
doFilter() {
// if its a first request:
if(httpSessionIsCreatedInThisRequest() && noFirstLoginTimeOnSession()) {
httpSession.put("FIRST_LOGIN_TIME", getCurrentTime())
}
else { // for any subsequent request
currentTime = getCurrentTime()
if(currentTime - getFromSession("FIRST_LOGIN_TIME") < 10 mins) {
// you can proceed
}
else {
logout()
//do whatever You Need Here: logout, destroy the session
}
}
}
這個解決方案對於簡單情況已經足夠了,但對於分佈式應用程序不夠(不擴展)。另外,如果你有很多用戶,爲每個用戶維護一個HttpSession是一個很大的開銷,因爲HttpSession只具有不可擴展性,並且你不希望進行會話複製,因爲它總是很痛苦:)
除了HttpSession,您可以通過Cookie實現相同的邏輯,但我懷疑Security-Wise是否足夠好。我提到這一點是因爲我不知道你的任何安全問題。
更多可擴展的方法。而不是使用HttpSession,使用一些持久的鍵值存儲/像Redis服務器的東西。將所有信息存儲在那裏。
根據具體的後端技術,您可以選擇使用分配給數據庫中每條記錄的TTL。您可能知道,但爲了完整答案:TTL(生存時間)意味着您可以指定服務器將清除該對象的時間(清除),而不會受到干擾。所以在這種情況下,你只需要檢查對象是否存在。這可以從許多服務器完成,因爲假設它們同步,在這種情況下它們不共享關於用戶的任何信息,所以這可以更好地擴展。
現在您已經注意到所有這些解決方案根本不使用計時器。 計時器可能會很貴,如果您使用java util定時器爲每個用戶使用引擎蓋下的線程。所以有多少線程綁定到用戶數是一個壞主意恕我直言。
您可以利用像Quartz
這樣的解決方案(這是一個調度框架),但是如果您嘗試爲不同的用戶創建不同的觸發器,它將變成一個混亂且不可維護的代碼。 此外,如果你有太多的作業/觸發器,Quartz開始滯後,這不是你想要的。底線,我真的不相信你應該在這種特殊情況下使用它。石英是一個很好的產品,不要誤解我的意思,我只是認爲它不適合你的需求。
希望這有助於
真棒,我一直在尋找這些細節,我的應用程序有一個模塊,應該只在特定的時間由用戶運行,一旦任務在這段時間內完成,時間限制可以延長。使用過濾器和當前時間+登錄時間(來自會話)的接近可能很有用。 非常感謝:) –
保持這種在web.xml文件
<session-config>
<session-timeout> 1000 </session-timeout>
</session-config>
不,我不是在尋找這種方法,只有當用戶在特定的持續時間內處於非活動狀態時,纔會結束會話,即使用戶處於活動狀態,我也想結束會話。 –
爲什麼你想強制註銷用戶......傢伙? –
它的一個要求,我想限制用戶只需登錄一個特定的日期或時間的特定時間... –
'「誰能幫我的代碼......」「 - 你誤解如何使用這個網站,你走得更遠之前,你要經過[旅遊]和[幫助]部分。 –
我期待解決這個問題。 –
你在尋求代碼,而不是這個網站的工作方式。這不是「給我的代碼網站」。如果你繼續這一問題的話,再讀一下你所面對的許多未來失望的鏈接。 –