0

我已经配置了http://community.jboss.org/wiki/HAWebSessionsviaDatabasePersistence上提出的解决方案,以及其他类似使用文件和数据库存储在 context.xml 中配置管理器的解决方案。但是在 JBoss-6.0.0.Final 中根本不起作用。可能是一个错误?

我已经进行了几次测试,并且在所有测试中,会话都正确存储在配置的持久性中。但是,如果我重新部署应用程序或重新启动 JBoss 服务器,它将忽略持久会话并要求我重新登录而不是重用以前的登录。我检查了 SessionID 是否存储在会话持久性中,并且浏览器正在发送正确的 cookie。

我附上了 JBoss-6.0.0.Final 的测试用例。它被配置为http://community.jboss.org/wiki/HAWebSessionsviaDatabasePersistence

只需将此行添加到文件 jboss-6.0.0.Final/server/default/data/hypersonic/localDB.script (如果需要,您可以使用自己的 mysql 数据源)

CREATE TABLE httpsessions (app VARCHAR(255) NOT NULL, id VARCHAR(255) NOT NULL, fullId VARCHAR(255) NOT NULL, creationtime BIGINT NOT NULL,  maxinactive BIGINT NOT NULL, version INT NOT NULL, lastaccess BIGINT NOT NULL,  isnew CHAR(1) NOT NULL, valid CHAR(1) NOT NULL, metadata VARBINARY NULL,  attributes LONGVARBINARY NOT NULL,  CONSTRAINT app_id PRIMARY KEY (app, id))

然后,部署应用程序并转到 localhost:8080/web 在登录表单中输入凭据: user:password 如果 suecssfull 登录,您将得到一个“ok”(参见 index.html)然后,您可以看到会话是如何存储的在数据库中:

$ cat jboss-6.0.0.Final/server/default/data/hypersonic/localDB.log

你会得到这样的东西:

...
DELETE FROM HTTPSESSIONS WHERE APP='/web' AND ID='vIUYhSZDkw7fjCnEealRFA__'
INSERT INTO HTTPSESSIONS VALUES('/web','vIUYhSZDkw7fjCnEealRFA__','vIUYhSZDkw7fjCnEealRFA__',1351177671379,1800,9,1351178495217,'0...
COMMIT

如果您使用以下方式重新部署应用程序:

$ touch jboss-6.0.0.Final/server/default/deploy/test.ear/META-INF/application.xml

然后在 localhost:8080/web 上重新加载浏览器,系统会提示您再次输入用户/密码,即使会话 id 已存储。您也可以使用本机 jbossweb.sar/context.xml 配置获得此行为。

如果我丢失了一些配置或者真的是一个错误,任何人都可以说我?我在几种配置之间做了很多排列,但总是得到相同的结果。

我放了一个测试用例的链接,因为我不知道如何将它附加到论坛:

http://kcy.me/bww8

问候。

4

1 回答 1

0

我进行了一些研究,发现为什么此配置对我不起作用:

如果您使用 JASS 作为身份验证框架,则会话持久性对于维护重新部署时登录的用户没有用处。JAAS 主体不会持久化,因此无论如何它都会丢失。

这可以使用集群来解决,这里是如何做到的:

http://corecanarias.blogspot.com.es/2013/03/jaas-persistent-sessions-with-jboss-6.html

于 2013-03-09T10:01:03.500 回答