【问题标题】:Retrieve requested URL before JAAS redirect it在 JAAS 重定向之前检索请求的 URL
【发布时间】:2012-12-19 17:08:41
【问题描述】:

是否可以在 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>

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

然后我填写登录表单并单击登录,这将转到我的后台bean,其中调用了我的 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

问候

【问题讨论】:

    标签: java jsf redirect login jaas


    【解决方案1】:

    登录页面由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 的情况下有一个备用 URL,即直接打开它而不先点击受限 URL)

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

    另见:

    【讨论】:

    • 完美,但是有些页面我有 escop.jsf?value=some-thing 可以将所有 url 和参数合并?
    • 它们可以通过FORWARD_QUERY_STRING 常量获得。查看更新的答案。
    • 非常完美!!!!我赞赏你的耐心和善意。在我的部门,你赢得了很多粉丝!非常感谢,祝你圣诞快乐,新年快乐! Greating 从里约热内卢 - 巴西
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多