的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);