为什么我的Java EE Web应用程序在成功登录后会继续提示登录?

时间:2013-03-01 14:10:27

标签: java-ee jsf-2 glassfish security

我正在尝试向现有Java EE Web应用程序添加安全区域。我正在使用Glassfish 3.1.2。

首先,我在应用服务器上配置了LDAP安全域。然后我编辑了web.xml,添加了security-constraint,login-config和security-role元素。我还编辑了glassfish-web.xml,以包括LDAP组和web.xml中定义的角色之间的映射。

到目前为止,一切都按预期进行。如果我尝试访问/ secure /目录中的某些内容,系统会提示我登录,如果登录成功,我将被带到请求的页面。

问题是会话没有保持登录状态。如果我尝试访问/ secure /目录中的另一个页面,它会提示我再次登录。

我可以看到它正在设置一个JSESSIONID cookie,但JSESSIONID值不断变化。我不确定是否会发生这种情况。

也许我在做一个错误的假设,认为应用服务器会为我处理这个问题?我是否需要向应用程序添加逻辑以检查会话是否已成功登录?

2013年3月8日更新


我监控HTTP以查看JSESSIONID正在改变的位置......

应用程序起始页

GET index.html (start page)

    Request: JSESSIONID=545b99397ecfb0f7287a9f0bea4c

点击链接以确保资源

GET test.xhtml 

    Request: JSESSIONID=545b99397ecfb0f7287a9f0bea4c

输入用户名/密码,提交表格

POST j_security_check

    Request: JSESSIONID=545b99397ecfb0f7287a9f0bea4c

GET test.xhtml

    Request:  JSESSIONID=545b99397ecfb0f7287a9f0bea4c
    Response: JSESSIONID=54a5264a0cbbe0dbaf73c82cda55 (Set-Cookie)

点击链接到安全文件夹中的其他资源

GET test2.xhtml

    Request:  JSESSIONID=54a5264a0cbbe0dbaf73c82cda55
    Response: JSESSIONID=54bdd1a27da000bcfe4ad80185b1 (Set-Cookie)

输入用户名/密码,提交表格

POST j_security_check

    Request: JSESSIONID=54bdd1a27da000bcfe4ad80185b1

GET test2.xhtml

    Request:  JSESSIONID=54bdd1a27da000bcfe4ad80185b1
    Response: JSESSIONID=5561dda1e57f165026ee570d7a28 (Set-Cookie)

如果我从web.xml中删除安全约束,我可以在不更改JSESSIONID的情况下浏览这些页面。

似乎客户端行为正常,它将JSESSIONID存储在cookie中并在请求中发送正确的值。

0 个答案:

没有答案