当使用PrettyFaces/Rewrite重写JSF应用程序中的URL并使用PicketLink保护它时,PicketLink似乎不使用重写规则。
例如,如果我使用以下内容配置PicketLink:
builder
.http()
.allPaths()
.authenticateWith()
.form()
.loginPage("/common/login.xhtml")重写规则如下:
<url-mapping id="login">
<pattern value="/login" />
<view-id value="/common/login.xhtml" />
</url-mapping>用户将被重定向到/common/login.xhtml,而不是/login。
我知道我可以在PicketLink中使用/login作为loginPage,但是到目前为止,我已经能够在我的应用程序中以一种完全透明的方式使用PrettyFaces/Rewrite (我可以删除它,一切仍然可以工作……但是带有丑陋的URL)。
我注意到来自PicketLink的SecurityFilter似乎先于来自PrettyFaces/Rewrite的RewriteFilter:
at org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler.handleResult(HttpRewriteResultHandler.java:41)
at org.ocpsoft.rewrite.servlet.RewriteFilter.rewrite(RewriteFilter.java:268)
at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:188)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.picketlink.http.internal.SecurityFilter.processRequest(SecurityFilter.java:346)
at org.picketlink.http.internal.SecurityFilter.performOutboundProcessing(SecurityFilter.java:237)
at org.picketlink.http.internal.SecurityFilter.doFilter(SecurityFilter.java:196)因此,如果PrettyFaces以某种方式包装HttpServletResponse以覆盖encodeRedirectUrl(),SecurityFilter将不会像以前那样看到这个包装的响应。
有没有办法让RewriteFilter排在SecurityFilter之前
我没有在我的部署描述符中声明这些过滤器,它们是通过PrettyFaces的web-fragment.xml和PicketLink的@WebListener自动注册的。
发布于 2016-07-26 00:33:50
您可以尝试在web.xml中添加一个absolute-ordering元素来控制顺序。类似于:
<web-app>
...
<absolute-ordering>
<name>com_ocpsoft_rewrite</name>
<others/>
<absolute-ordering>
...
</web-app>https://stackoverflow.com/questions/38564805
复制相似问题