Java EE 6安全和重定向

4

我有一个在JBoss 7.1.1上运行的Java EE 6 Web应用程序,其中一些页面需要身份验证,而许多页面则不需要。对于已经认证的页面,我正在使用Servlet 3.0编程安全性,如此前帖子所述。

在我的web.xml文件中,我有以下条目

<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/login</form-login-page>
    <form-error-page>/loginError</form-error-page>
  </form-login-config>
</login-config>

在我的登录类中,我有一个用@PostConstruct注释的方法,用于捕获请求的页面: String previousURL = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(RequestDispatcher.FORWARD_QUERY_STRING) 然而,它计算的是/login页面本身,而不是用户最初点击并由JBoss根据web.xml中的login-config设置转发到的页面。因此,当我转发到previousURL时,它只会将我带回登录页面,而不是最初用户点击的页面。我做错了什么?
1个回答

1
你正在尝试检索错误的属性。你应该尝试检索的是RequestDispatcher.FORWARD_REQUEST_URI,这是一个实际的URI。你当前尝试检索的是查询字符串(基本上是在实际URL之后的任何内容;?param=1等),跟随所请求的URL。

谢谢你发现了这个。修改后,我仍然会得到previousURL到登录页面,而不是我最初请求的页面。 - Anand
你确定 @Anand 用户提供的凭据已经成功验证了吗? - kolossus
我认为是这样的。这是来自 JBoss 的日志条目:执行查询:select password from PRINCIPAL where username = ?,使用用户名:admin ... 用户 'admin' 已通过身份验证,loginOk=true 提交,loginOk=true ... 将用户分配给 Administration 角色 ... 用户:admin 已通过身份验证 - Anand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接