在我的JSF 2.0应用程序中,我有一个会话处理用户bean,我使用以下代码将Siteminder请求头值设置为会话变量:
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个发生。还有一个信息是应用程序位于weblogic服务器上,该服务器具有2个用于负载平衡的托管实例。所以我不确定当第一个请求输入到一个实例而第二个请求转到另一个实例时会话是否重置为null
答案 0 :(得分:0)
可能发生的一件事是您的应用程序未启用共享会话。
http://docs.oracle.com/cd/E15051_01/wls/docs103/webapp/sessions.html
并且因为其负载平衡可能一个受管服务器没有其他受管服务器启动(在内存上)会话。
配置正确的weblogic.xml或weblogic-application.xml以通过内存,缓存等启用会话共享。
将Load Balancer配置为使用依赖于Load Balancer的设备/软件的Sticky Sessions的其他可能性。
问候。