0

我的问题与现有的 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>
4

0 回答 0