2014-03-04 79 views
0

的JBoss EAP 6.2.0.GA(AS 7.3.0.Final-紅帽-14)JBOSS SSO閥 - 會話尚未註冊,因此不會失效在註銷

我配置的兩個戰爭與SSO閥和相同的安全域。

登錄到一個應用程序也會按照預期登錄到另一個應用程序。

但是,如果我從應用程序1註銷,則只有該會話失效。因此,當我以其他用戶身份登錄時,App 2在其會話中擁有舊數據。

我需要在註銷時使所有會話無效。這似乎是SingleSignOn閥門中代碼的意圖。 (這被稱爲上註銷)的方法註銷(字符串ssoId)包括這段代碼:

// Expire any associated sessions 
    Session sessions[] = sso.findSessions(); 
    for (int i = 0; i < sessions.length; i++) { 
     // Remove from reverse cache first to avoid recursion 
     synchronized (reverse) { 
      reverse.remove(sessions[i]); 
     } 
     // Invalidate this session 
     sessions[i].expire(); 
    } 

的問題是,不知何故從應用程序2會議無法與SSO條目相關聯,並沒有得到這裏失效了。

編輯:

因爲我已經發現,在戰爭的web.xml的分配標籤的存在會導致會話被鈍化和鈍化的SSO閥將刪除SSO項(sessionEvent方法會話SingleSignOn.java第333行)。將會話從sso條目中刪除後,註銷時不會失效。不知道爲什麼會話需要從鈍化的sso條目中刪除。

SingleSignOne.java LN 333:

// Was the session destroyed as the result of a timeout? 
// If so, we'll just remove the expired session from the 
// SSO. If the session was logged out, we'll log out 
// of all session associated with the SSO. 
if (((session.getMaxInactiveInterval() > 0) 
     && (System.currentTimeMillis() - session.getLastAccessedTimeInternal() >= 
      session.getMaxInactiveInterval() * 1000)) 
     || (Session.SESSION_PASSIVATED_EVENT.equals(event.getType()))) { 
    removeSession(ssoId, session); 

回答

0

刪除從戰爭的web.xml中的分配標籤解決了這個問題對我來說。

如果您確實需要將您的應用程序集羣化,那麼使用使用羣集SSO應該可以正常工作。

什麼不工作是羣集會話(這是可分發標記做什麼)與非羣集sso。