2015-09-07 91 views
1

我們將應用程序從JBoss 5.1.0 GA遷移到WildFly 8.2.0。我觀察到「-Djboss.node.name」(node1)的值附加到JSESSIONID cookie,這在我的應用程序中導致嚴重問題。如何避免將-Djboss.node.name值附加到JSESSIONID

在我的應用程序中,我們有一個SessionListener類,我們將sessionids存儲到一個靜態映射中,並在執行任何操作時驗證映射中的會話id並加載適當的數據。

請找到下面的代碼。

In web.xml 
<listener> 
    <listener-class>com.project.session.ProjectSessionListener</listener-class> 
</listener> 

和ProjectSessionListener代碼是

public class ProjectSessionListener extends SeamListener { 
private static final Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>(); 
............................... 
@Override 
public void sessionCreated(final HttpSessionEvent event) { 
super.sessionCreated(event); 
final HttpSession session = event.getSession(); 
final String sessionId = session.getId(); 
sessionMap.put(sessionId, session); 
} 
} 

雖然添加的sessionid到sessionMap沒有.node1附加到會話(ABCD1234),因此被的sessionid在地圖保存沒有.node1 ,但登錄頁面已成功加載。

當我們點擊登錄時,我發現.node1被追加到JSESSIONID9(ABCD1234.node1),同時驗證我們正在嘗試使用沒有.node1的會話日期,這顯然返回null並導致異常。

I tried 
1) removing the -Djboss.node.name from WildFly confuguration, in this case it is appending my pc name(ABCD1234.sreenath-WIN-7). 

2) Removing <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/> from standalone .xml 

有什麼辦法可以避免在WildFly上追加額外字符到JSESSIONID?

回答

0

在任何情況下,您都不應該依賴javax.servlet.HttpSession.getId()返回的值。除了唯一性之外,servlet規範沒有對其值的承諾。在會議期間,它的價值可以偶爾會改變。在集羣環境中尤其如此。

如果您需要會話關聯密鑰,那麼您應該創建自己的會話(java.util.UUID.randomUUID())並將其存儲爲會話屬性。