【问题标题】:How EAR packages and beans can share session id?EAR 包和 bean 如何共享会话 ID?
【发布时间】:2011-12-25 16:15:56
【问题描述】:

我有 3 个 EAR 包,它们组合在一起构成了一个巨大的 Web Java 应用程序。是否可以将 bean 配置到包中以在它们之间共享会话 id 数据。我的想法是开发一个登录表单,使用会话 ID 将用户注册到数据库表中。每次用户浏览应用程序时,他们的会话 ID 都用于识别用户。当用户在不同的 EAR 包和 bean 之间切换时,棘手的部分就出现了。 session id 会改变,其他 bean 不会知道新的 session id 是什么。有没有办法将 bean 配置到 EAR 包中以共享包含会话 id 的数据。


我创建了两个相同的 EAR 包,并在每个包中放置了 context.xml 文件。这是文件结构:

SR_57
├── pom.xml
├── SR_57-ear
│   ├── pom.xml
│   ├── src
│   │   └── main
│   │       └── application
│   │           └── META-INF
│   │               └── MANIFEST.MF
│   └── target
│       ├── application.xml
│       ├── maven-archiver
│       │   └── pom.properties
│       ├── SR_57-ear-1.0-SNAPSHOT
│       │   ├── META-INF
│       │   │   ├── application.xml
│       │   │   └── MANIFEST.MF
│       │   ├── SR_57-ejb-1.0-SNAPSHOT.jar
│       │   └── SR_57-web-1.0-SNAPSHOT.war
│       └── SR_57-ear-1.0-SNAPSHOT.ear
├── SR_57-ejb
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   └── com
│   │   │   │       └── SR_57
│   │   │   └── resources
│   │   │       └── META-INF
│   │   │           └── MANIFEST.MF
│   │   └── test
│   │       └── java
│   │           └── com
│   │               └── SR_57
│   └── target
│       ├── classes
│       │   └── META-INF
│       │       └── MANIFEST.MF
│       ├── endorsed
│       │   └── javaee-endorsed-api-6.0.jar
│       ├── maven-archiver
│       │   └── pom.properties
│       ├── SR_57-ejb-1.0-SNAPSHOT.jar
│       └── surefire
└── SR_57-web
    ├── faces-config.NavData
    ├── nb-configuration.xml
    ├── pom.xml
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── SR_57
    │   │   │           └── userCheck.java
    │   │   ├── resources
    │   │   └── webapp
    │   │       ├── home.xhtml
    │   │       ├── index.html
    │   │       ├── resources
    │   │       │   ├── css
    │   │       │   │   ├── sr_style.css
    │   │       │   │   └── style.css
    │   │       │   ├── images
    │   │       │   │   ├── 1.jpg
    │   │       │   │   ├── 2.jpg
    │   │       │   │   ├── 3.jpg
    │   │       │   │   ├── 4.jpg
    │   │       │   │   ├── 5.jpg
    │   │       │   │   ├── 6.jpg
    │   │       │   │   ├── 7.jpg
    │   │       │   │   ├── bg_1.jpg
    │   │       │   │   ├── bg.jpg
    │   │       │   │   ├── overlay_1.png
    │   │       │   │   ├── overlay.png
    │   │       │   │   ├── title_1.png
    │   │       │   │   └── title.png
    │   │       │   └── js
    │   │       │       ├── ChunkFive_400.font.js
    │   │       │       ├── cufon-yui.js
    │   │       │       ├── jquery.easing.1.3.js
    │   │       │       └── jquery.min.js
    │   │       ├── userNav.xhtml
    │   │       └── WEB-INF
    │   │           ├── context.xml
    │   │           ├── faces-config.xml
    │   │           ├── java.sql.Driver
    │   │           └── web.xml
    │   └── test
    │       └── java
    │           └── com
    │               └── SR_57
    └── target
        ├── classes
        │   └── com
        │       └── SR_57
        │           └── userCheck.class
        ├── endorsed
        │   └── javaee-endorsed-api-6.0.jar
        ├── generated-sources
        │   └── annotations
        ├── maven-archiver
        │   └── pom.properties
        ├── SR_57-web-1.0-SNAPSHOT
        │   ├── home.xhtml
        │   ├── index.html
        │   ├── META-INF
        │   ├── resources
        │   │   ├── css
        │   │   │   ├── sr_style.css
        │   │   │   └── style.css
        │   │   ├── images
        │   │   │   ├── 1.jpg
        │   │   │   ├── 2.jpg
        │   │   │   ├── 3.jpg
        │   │   │   ├── 4.jpg
        │   │   │   ├── 5.jpg
        │   │   │   ├── 6.jpg
        │   │   │   ├── 7.jpg
        │   │   │   ├── bg_1.jpg
        │   │   │   ├── bg.jpg
        │   │   │   ├── overlay_1.png
        │   │   │   ├── overlay.png
        │   │   │   ├── title_1.png
        │   │   │   └── title.png
        │   │   └── js
        │   │       ├── ChunkFive_400.font.js
        │   │       ├── cufon-yui.js
        │   │       ├── jquery.easing.1.3.js
        │   │       └── jquery.min.js
        │   ├── userNav.xhtml
        │   └── WEB-INF
        │       ├── classes
        │       │   └── com
        │       │       └── SR_57
        │       │           └── userCheck.class
        │       ├── context.xml
        │       ├── faces-config.xml
        │       └── web.xml
        ├── SR_57-web-1.0-SNAPSHOT.war
        └── surefire

64 directories, 75 files

我将 context.xml 文件放入 WEB-INF 目录并添加了这一行:

<?xml version="1.0" encoding="UTF-8"?>
<SessionCookie path="/" />

我添加了一个 java 代码,它从 bean 中获取 cookie 编号并将它们写入数据库。然后我运行购买的 EAR 包,看看它们是否会共享一个会话 ID。事实证明,来自一个客户端和一个浏览器的 cookie id 是不同的。配置不起作用。我使用 JBoss 7.1.0

也许我弄错了必须放置 context.xml 文件的目录?

【问题讨论】:

    标签: java jboss ear war


    【解决方案1】:

    我认为正确的方法是选择单点登录选项。 JOSSO、OpenSSO 等开源项目很少。

    【讨论】:

    【解决方案2】:

    默认情况下,会话 cookie 与上下文路径相关联。您希望将它们绑定到域根目录(假设所有 webapps 在同一域上运行),以便浏览器将相同的会话 cookie 返回到在同一域中运行的所有 webapp 上下文。您可以通过相应地设置 cookie 的路径来通过绑定到域而不是上下文路径的自定义 cookie 来做到这一点:

    Cookie cookie = new Cookie(name, value);
    cookie.setPath("/");
    

    或者通过配置 servlet 容器将默认会话 cookie 绑定到域而不是上下文路径。如果是 JBoss,请检查 context.xml 中的 &lt;SessionCookie&gt; 设置:

    <SessionCookie path="/" />
    

    【讨论】:

    • 我使用 Jboss 7。如果我在每个 .EAR 的 web.xml 文件中添加这个“”,它会工作吗?
    • 会话 cookie 只会在与指定路径匹配的每个请求上发送(因此不会在与指定路径不匹配的请求上发送)。如果这正是您想要的,请继续。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多