是否可以在 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 但 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
问候
最佳答案
登录页面由服务器端转发器内部打开 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 的(后)构造函数。
另见:
关于java - 在 JAAS 重定向之前检索请求的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957517/