在我的 JavaEE 应用程序中,我使用 Apache Shiro[1] 进行用户身份验证。 我的用户通过 GET-URL 进行导航,例如“/company/index.xhtml?companyId=327”。
我已按照 BalusC 的指南[2]启用了编程登录:
SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(Faces.getRequest());
我的问题是,当我的情况是使用或不使用 RememberMe 的异步 POST 时,savedRequest.getRequestUrl() 不包含前面提到的 GET 参数;例如,仅返回“/company/index.xhtml”。似乎“FacesAjaxAwareUserFilter”(参见[2])不知道 GET 参数。同步 GET 调用一切正常。
由于使用“FacesAjaxAwareUserFilter”时需要身份验证,如何在 shiro 重定向后获取 GET 参数?
[2] 关注了这篇关于 JavaEE 和 Shiro 的精彩文章:http://balusc.blogspot.de/2013/01/apache-shiro-is-it-ready-for-java-ee-6.html
最佳答案
JSF ajax 请求被发送到 <h:form>
生成的 URL 。但是,默认情况下,这并不完全是包含查询字符串的当前 URL,默认情况下,它是不包含查询字符串的当前 URI。
有多种方法可以解决此问题。最简单但最丑陋的方法是使用 JS:
<h:form id="foo">
...
</h:form>
<script>document.getElementById("foo").action += "?" + location.search;</script>
最简洁的方法是创建自定义 ViewHandler
谁的 getActionURL()
(如 <h:form>
使用)将返回带有查询字符串的所需 URL。
JSF 实用程序库 OmniFaces已经有这样一个组件可以根据 View 参数执行此操作: <o:form>
这基本上扩展了 <h:form>
支持includeViewParams="true"
(与 <h:link>
完全相同)。
<f:metadata>
<f:viewParam name="companyId" value="#{bean.company}" />
</f:metadata>
...
<o:form includeViewParams="true">
...
</o:form>
关于ajax - Apache-Shiro : User authenticates within AJAX, 登录后如何恢复 GET-Variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14726767/