4

我有一个在 JBoss 7.1.1 上运行的 Java EE 6 Web 应用程序,它有一些页面需要身份验证,而许多页面不需要。对于经过身份验证的页面,我使用的是 Servlet 3.0 Programmatic Security,如上一篇文章中所述。

在我的 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 页面本身,而不是用户请求的页面,然后由于 web.xml 中的 login-config 设置被 JBoss 转发到该页面。结果,当我转发到 previousURL 时,它只是将我带回到登录页面,而不是用户最初单击的页面。我究竟做错了什么?

4

1 回答 1

1

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

于 2013-03-05T04:21:32.450 回答