我的问题与现有的 SO 帖子非常相似:
JSF - Spring Security Integration issue
Ravi 关于禁用每个请求一次并指定 FORWARD 以“让它工作”的响应在网络上的其他地方得到了回应,即: http:
//www.coderanch.com/t/61490/oa/Spring-security -intercept-url
很久以前: http:
//forum.springsource.org/showthread.php? 11025-lt-jsp-forward-gt-bypasses-Acegi
但是,我只是无法让它工作。我已经完成了 Ravi 的回复所建议的两个项目:
1)将每个请求一次放入spring的配置中:
<http auto-config="true" use-expressions="true" once-per-request="false">
<intercept-url pattern="/partners/**" access="ROLE_PARTNER" />
.
.
.
</http>
2)包括前进:
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
就我而言,我的应用程序的合作伙伴部分有一个命令链接,该链接有效(但不应该)。确实,第一个链接之后的每个链接以及发布的任何搜索都不起作用。但是进入 /parterns/** 的初始导航确实有效,我认为它不应该。
<p:menuitem>
<h:commandLink ajax="false" action="/partners/search/partnerSearch"
styleClass="ui-menuitem-link
ui-corner-all">
<h:outputText value="Partners"/>
</h:commandLink>
</p:menuitem>
我假设这意味着 JSF 实际上并没有使用请求调度程序转发来“转发”导航结果(因此,Spring 永远没有机会重新评估安全性)。我试过放置断点并寻找自己,但这有点超出我所看到的理解。
我知道我可以使用重定向(但就像我链接到的第一个 SO 帖子一样,不想这样做)。我也知道我可以<sec:ifAnyGranted roles="ROLE_PARTNER">
先放置菜单项以防止点击。
我实际上只是好奇为什么这根本不起作用,当一些消息来源似乎表明它应该时。
我对它不起作用的经验至少在另一个地方得到了回应:http:
//forum.springsource.org/showthread.php? 82900-FilterSecurityInterceptor-not-being-called-for-a-JSF-forward
我的东西是:
<spring.version>3.1.3.RELEASE</spring.version>
<jsf.version>2.1.23</jsf.version> (mojarra)
<primeFaces.version>3.5.9</primeFaces.version>