0

将 OpenLiberty sessionCache-1.0 功能与 HazelCast 一起使用,您可以轻松地在 HazelCast 内存集群中保存和共享会话数据,如下所述:https ://openliberty.io/guides/sessions.html 。

但是,在此设置中,会话数据在内部存储在名为:com.ibm.ws.session.attr.[app-context-root] 和 com.ibm.ws.session.meta.[app-context-root] 的映射中此处指出(尽管我没有看到 OpenLiberty 文档明确说明了这一点)

这可以防止不同的应用程序(具有不同的上下文根)共享会话数据,因为它们正在从不同的命名映射中写入和读取会话数据。

有没有办法覆盖此名称以使具有不同上下文根的应用程序能够从同一个映射中读写以共享会话数据?

我正在查看 OpenLiberty 文档中的httpSession-httpSessionCache-properties,但找不到任何支持此类内容的属性。

4

2 回答 2

0

要在同一个 EAR 中的不同 Web 应用程序之间共享会话,您可以使用 ibm-application-ext.xml 中的 shared-session-context 来启用所有 Web 应用程序使用相同的会话上下文根。

https://www.ibm.com/docs/en/was-liberty/base?topic=configuration-osgiapplication#application-ext

这是一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<application-ext version="1.1" 
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-application-ext_1_1.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://websphere.ibm.com/xml/ns/javaee">
    
    <shared-session-context value="true"/>
</application-ext>
于 2021-11-19T15:06:26.020 回答
0

规范禁止跨不同应用共享会话数据:

HttpSession objects must be scoped at the application (or servlet context) level. [...] the object referenced, including the attributes in that object, must never be shared between contexts by the container.

So if you want to share some data between different apps, you have to create separate cache, not related to the sessions. You can also use Hazelcast for it, just not the session cache.

If all apps for example needs to share data that is related to given user, user login could be a key in the cache store.

于 2021-11-22T12:08:52.783 回答