在JAAS重定向之前检索请求的URL

时间:2012-12-19 17:08:42

标签: java jsf redirect login jaas

在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 ,但网址仍然与用户请求的相同。

然后我填写登录表单并单击Login,进入我的backbean,调用我的loginModule和callbackHandler ex。:

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

问候

1 个答案:

答案 0 :(得分: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;
}

(请注意,对于返回null的案例,请设置后备网址,即直接打开时不首先点击受限制的网址

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

另见: