0

我面临着类似的问题,如JSF force URL rewriting 希望避免跨应用程序的会话共享

  • 旧系统 - 环境:JSF 1.2、jsf-api-2.1.0-b03、jsf-facelets-1.1.14、jsf-impl-1.2

我在 websphere 7 上部署了两个独立的应用程序服务器,使用标准 LDAP 注册表使用基于表单的身份验证。

  1. Server1 webapp (ear):- 使用 JSP 创建 - 基于表单的身份验证。
  2. Server2 webapp (ear):- 使用 JSF 创建

面孔-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 重写?) ....请帮助...谢谢。

4

1 回答 1

1

我找到了解决方案。

在 websphere 本身下,我可以更改每个应用程序服务器的 cookie 名称。

http://www-01.ibm.com/support/docview.wss?uid=swg21225834

默认情况下,它使用 JSESSIONID,您可以根据您的应用程序使用重命名它,这样它就不会在浏览器选项卡访问之间覆盖。

于 2013-04-05T15:01:17.343 回答