5

是否可以在 JAAS 重定向之前检索用户请求的 URL?

我的 web.xml 是这样的:

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

所以,当我没有登录并尝试去前。www.blah.com/myApp/users.jsf 然后应用程序将我重定向到login.jsf但 url 仍然与用户请求的相同。

然后我填写登录表单并单击登录,这将转到我的 backbean,其中调用我的 loginModule 和 callbackHandler 例如:

public String actionLogin(){
   //do my login and stuff
   return "page that user requested";
}

我尝试了很多方法来获取用户请求的页面。request.getRequestURL()

所有人都回来了:www.blah.com/myApp/login.jsf

有什么方法可以获取请求的页面?www.blah.com/myApp/users.jsf

问候

4

1 回答 1

2

登录页面由服务器端转发在内部打开RequestDispatcher#forward()。因此,这意味着最初请求的页面可用作请求属性,其名称与RequestDispatcher.FORWARD_REQUEST_URI常量中指定的名称相同。因此,在 JSF 术语中,可用如下方式:

String originalURI = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);
String originalQuery = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_QUERY_STRING);

if (originalQuery != null) {
    originalURI+= "?" + originalQuery;
}

(请记住,在它返回的情况下有一个备用 URL null,即直接打开它而不先点击受限 URL 时)

收集它的最佳位置是@ViewScoped与登录页面关联的 bean 的(后)构造函数。

也可以看看:

于 2012-12-19T17:12:37.960 回答