如何避免将-Djboss.node.name值附加到JSESSIONID

时间:2015-09-07 14:50:47

标签: wildfly wildfly-8

我们将应用程序从JBoss 5.1.0 GA迁移到WildFly 8.2.0。我发现" -Djboss.node.name"(node1)的值附加到JSESSIONID cookie,这导致我的应用程序出现重大问题。

在我的应用程序中,我们有一个SessionListener类,我们将sessionid存储到静态映射中,在执行任何操作时,我们将从地图验证会话ID并加载适当的数据。

请找到以下代码。

public class ProjectSessionListener extends SeamListener {
private static final Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();
...............................
@Override
public void sessionCreated(final HttpSessionEvent event) {
super.sessionCreated(event);
final HttpSession session = event.getSession();
final String sessionId = session.getId();
sessionMap.put(sessionId, session);
 }
}

并且ProjectSessionListener中的代码是

I tried
1)  removing the  -Djboss.node.name from WildFly confuguration, in this case it is appending my pc name(ABCD1234.sreenath-WIN-7).

2) Removing <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/> from standalone .xml

将sessionid添加到sessionMap时,会话中没有附加.node1(ABCD1234),因此在Map中保存的sessionid没有.node1,但登录页面已成功加载。

当我们点击登录时,我发现.node1被附加到JSESSIONID9(ABCD1234.node1)并且在验证时我们正在尝试使用不使用.node1来获取会话日期,这显然是返回null并导致异常。

let task = NSTask()
task.launchPath = "/bin/bash"
task.arguments = ["arg1", "arg2", "arg3"]

有没有办法避免在WildFly上将额外的字符附加到JSESSIONID?

1 个答案:

答案 0 :(得分:0)

在任何情况下,您都不应该依赖javax.servlet.HttpSession.getId()返回的值。除了唯一性之外,servlet规范对它的价值没有任何承诺。它的价值可以并且偶尔会在会话期间发生变化。在集群环境中尤其如此。

如果您需要一个用于会话关联的密钥,那么您应该创建自己的密钥(java.util.UUID.randomUUID())并将其存储为会话属性。