我正面临着类似JSF强制URL重写的问题希望避免跨应用程序共享会话
- 遗留系统-环境:JSF 1.2, JSF -api-2.1.0-b03,jsf-facelets-1.1.14, jsf - impl - 1.2
我在websphere 7上部署了两个独立的应用服务器使用基于表单的身份验证,使用标准的LDAP注册表。
- Server1 webapp (ear):-使用基于JSP表单的身份验证创建。
- Server2 webapp (ear):-使用JSF创建
faces-config.xml
<managed-bean>
<managed-bean-name>Login</managed-bean-name>
<managed-bean-class>
com.abc.ui.mbean.session.LoginMBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>DeviceType</managed-bean-name>
<managed-bean-class>com.abc.nsam.jsfmanager.jsf.mbean.stateful.DeviceTypeMBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>contextMBean</property-name> "This is of session scope"
<value>#{Context}</value>
</managed-property>
</managed-bean>
当我登录到server1 &做一些操作,然后在IE上打开新的选项卡,并为server2输入URL,它会自动登录我(因为他们共享相同的本地用户名),并做一些操作,然后回到server1选项卡..它抛出ViewExpiredException,并将我注销,并再次返回登录页面。登录后,当我回到server2选项卡并单击任何链接时,它会注销我。
所以看起来jsessionId被2个不同的选项卡(两个不同的应用服务器实例)覆盖。
根据这个问题的答案:你能给我推荐同样的——正确管理作用域吗?但它似乎是请求范围在我的情况下,登录它的会话范围.....我应该重写URL吗?(使用漂亮的URL重写?)....请帮忙……谢谢你。
我找到解决办法了。
在websphere下,我可以更改每个应用服务器的cookie名称。
http://www - 01. - ibm.com/support/docview.wss?uid=swg21225834
默认情况下,它使用JSESSIONID,你可以根据你的应用程序使用重命名它,这样它就不会在浏览器选项卡访问之间覆盖。