【问题标题】:session-descriptor not working for sharing sessions with weblogic会话描述符不适用于与 weblogic 共享会话
【发布时间】:2021-04-25 03:27:04
【问题描述】:

我有localhost:8080/app1(app1 是ear 有2 个战争项目,因此我将会话描述符添加到war 的weblogic.xml 和ear 的weblogic-application.xml 中)并希望在localhost:8080/app2 中访问它的会话。 app1 有身份验证部分,所以我想在 app2 中访问 app1 的会话。注意 app1 和 app2 都是不同的耳朵。

其中一个war文件的weblogic.xml

<?xml version="1.0" encoding="UTF-8"?>
  <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
    xmlns:bae="http://www.bea.com/ns/weblogic/90"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">
<bae:session-descriptor>    
    <bae:persistent-store-type>memory</bae:persistent-store-type>
    <bae:sharing-enabled>true</bae:sharing-enabled>
</bae:session-descriptor> 

<wls:library-ref>
    <wls:library-name>jstl</wls:library-name>
    <wls:specification-version>1.2</wls:specification-version>
    <wls:exact-match>true</wls:exact-match>
</wls:library-ref>
</wls:weblogic-web-app>

耳朵级别的 weblogic-application.xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application 
  xmlns:bae="http://www.bea.com/ns/weblogic/90"
  xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.5/weblogic-application.xsd">
<!--weblogic-version:12.1.3-->
<wls:application-param>
    <wls:param-name>webapp.encoding.default</wls:param-name>
    <wls:param-value>UTF-8</wls:param-value>
</wls:application-param>

<bae:session-descriptor>    
    <bae:persistent-store-type>memory</bae:persistent-store-type>
    <bae:sharing-enabled>true</bae:sharing-enabled>
</bae:session-descriptor>
</wls:weblogic-application>

在 app2 中,我有一个添加代码的过滤器

HttpSession session = ((HttpServletRequest) request).getSession(false);

在这个 session 对象中,我还想将一些自定义属性从 app1 传递给 app2。
我是 weblogic 配置的新手,不太了解这些,通过阅读 This tutorialthis one 以及显然 StackOverflow 尝试了这些。

任何指导或帮助或建议都将非常受欢迎。

【问题讨论】:

    标签: java session servlet-filters weblogic12c


    【解决方案1】:

    如果应用程序部署在同一台服务器上,您可以共享相同的会话 cookie 名称。您应该在两个 weblogic.xml war 文件部署描述符中使用相同的 cookie 名称:

    weblogic.xml

        <session-descriptor>
            <cookie-name>MY_COOKIE</cookie-name>
            <cookie-domain></cookie-domain>
            <cookie-path></cookie-path>
            <cookie-secure>false</cookie-secure>
            <url-rewriting-enabled>false</url-rewriting-enabled>
        </session-descriptor>
    

    这意味着如果客户端使用浏览器,您可以在 app2 Web 应用程序中重复使用来自 app1 的身份验证。

    我认为通过 Session 对象从 app1 向 app2 发送信息是不可能的,你可以尝试使用 Weblogic 支持的 EJB 或 JMS。

    【讨论】:

    • Cookie 共享是选项之一,但这对我没有帮助,因为我还需要访问会话数据。其次,在同一个应用程序、同一个主机中,weblogic 文档说可以共享会话,如提到的here
    • @kAmol 似乎有可能,只记得使用 Serializable 对象,但请注意会话共享用于“Web 应用程序”,可能仅表示 .war 文件。实际上,重新阅读文档我认为它仅指同一.ear部署中的“Web应用程序”...
    猜你喜欢
    • 2018-04-01
    • 2015-08-28
    • 1970-01-01
    • 2015-12-16
    • 2016-06-17
    • 1970-01-01
    • 2010-09-27
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多