2013-10-14 36 views
1

空以我JSF 2.0應用,我有一個會話應對用戶豆我在哪裏使用下面的代碼設定的SiteMinder請求標頭值到會話變量:下JSF 2.0會話返回有時

FacesContext context = FacesContext.getCurrentInstance(); 
    Map<String, String> requestHeaderMap = context.getExternalContext().getRequestHeaderMap(); 
context.getExternalContext().getSessionMap().put(GlobalConstants.SITEMINDER_USERID, userId); 
    context.getExternalContext().getSessionMap().put(GlobalConstants.SITEMINDER_USERGROUPS, groups); 
    context.getExternalContext().getSessionMap().put(GlobalConstants.SITEMINDER_USERNAME, userName); 

從我的過濾器doFilter方法,我讀使用

HttpSession ses = req.getSession(); 

會話變量,但SES返回NULL和我的過濾器授權失敗。有人能告訴我這裏發生了什麼嗎?這並不總是發生,每10個用戶中就有1個發生。還有一個信息是,該應用程序位於帶有2個託管實例的weblogic服務器上以進行負載平衡。所以我不確定當第一個請求聚合到一個實例並且第二個請求到達另一個實例時會話重置爲空

+0

getSession()方法可能返回一個有效的會話(如果存在),或者如果沒有與HttpServletRequest關聯的有效HttpSession,則返回null。如果你得到一個null,這意味着它是一個新的請求或前一個會話已過期等。 – Yamada

回答

0

可能發生的一件事是您的應用程序未啓用共享會話。

http://docs.oracle.com/cd/E15051_01/wls/docs103/webapp/sessions.html

而且因爲它的負載均衡,也許一個管理服務器沒有會話啓動(內存)由其他託管服務器。

配置適當的weblogic.xml或WebLogic-application.xml中啓用通過內存,緩存中的會話共享等

另一種可能性是配置負載平衡器來使用取決於電器的粘性會話/負載均衡器的軟件。

http://dev.fyicenter.com/Interview-Questions/JavaScript/What_does_the_term_sticky_session_mean_in_a_web_.html

問候。