升级到Spring Security 3.1确实是干净利落的最佳方式。如果你不能这样做,你仍然可以达到理想的结果,但它不会那么漂亮。如果您的资源在URL空间中完全分离(因为它们看起来像),则可以添加第二个Spring Security筛选器,仅覆盖/ api资源并确保它在默认筛选器之前应用。要在Spring Security 3.0中分离配置,需要为第二个过滤器分别创建一个应用程序上下文,并配置过滤器以便在众所周知的地方找到它 - 例如其含有/WEB-INF/api-servlet.xml
<filter>
<filter-name>apiSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>contextAttribute</param-name>
<param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.api</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>apiSecurityFilterChain</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>api</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
在此示例中的调度员servlet有一个应用程序上下文:一个DispatcherServlet的在有关其名称(在下面的例子中“API”)的属性创建在servlet上下文的上下文,并将其存储Spring Security安全筛选器链,其中包含id="apiSecurityFilter"
。
这显然是可行的。我现在没有足够的时间来获得正确的答案,但相信我过去做得更加复杂。如果没有人,我可能会回到这里给出完整的答案。同时,有2条建议:你会发现官方文档比google更多,阅读spring安全的源代码会有很大的帮助。 –
嗨,因为我真的不想升级春天版本,并且stil无法弄清楚如何做这件事情,我希望你有时间给我答案...问候 – mimiz
最后有人给了我记住的答案。我同意你应该升级Spring。这不应该是痛苦的。如果是,则可能是重新考虑构建过程的正确时间; =) –