Apache-Shiro:用户在 AJAX 中进行身份验证,登录后如何恢复 GET-Variables?
Posted
技术标签:
【中文标题】Apache-Shiro:用户在 AJAX 中进行身份验证,登录后如何恢复 GET-Variables?【英文标题】:Apache-Shiro: User authenticates within AJAX, how to restore GET-Variables after login? 【发布时间】:2013-01-21 12:22:00 【问题描述】:在我的 JavaEE 应用程序中,我使用 Apache Shiro[1] 进行用户身份验证。 我的用户正在通过 GET-URL 导航,例如“/company/index.xhtml?companyId=327”。
我已按照 BalusC 的指南 [2] 启用了编程登录:
SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(Faces.getRequest());
我的问题是,savedRequest.getRequestUrl() 不包含前面提到的 GET 参数,当我的情况是异步 POST 有或没有 RememberMe 时;例如,仅返回“/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
【问题讨论】:
【参考方案1】: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 已经有这样一个组件,它基于视图参数执行此操作:<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>
【讨论】:
以上是关于Apache-Shiro:用户在 AJAX 中进行身份验证,登录后如何恢复 GET-Variables?的主要内容,如果未能解决你的问题,请参考以下文章
Apache-Shiro分布式环境配置(与redis集成)(转)