ajax - Apache-Shiro : User authenticates within AJAX, 登录后如何恢复 GET-Variables?

标签 ajax jsf jakarta-ee shiro

在我的 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 参数?

[1] https://shiro.apache.org/

[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/

相关文章:

jsf - @RequestScoped bean 实例是如何在运行时提供给 @SessionScoped bean 的?

ajax - 异步加载图像

java - 管理 session 属性以在所有 Web 应用程序中访问

java - 如何在 jsf 1.2 中使用 DynamicJasper

css - 在标签 p :inputText 中使用属性 moz-transition 和 webkit-transition

jsp - Java EE 文件上传到服务器 : can't deploy web-app

jakarta-ee - 是否可以在 Tomcat 中为单个 webapp 运行 Logback?

javascript - 如何从 jQuery 中的附加元素发送 AJAX 请求

javascript - 在 JavaScript/jQuery 中使用 Ajax 调用时出现类型错误

javascript - event.preventDefault();不在ajax中工作