2012-11-13 89 views
2

我在我的应用程序中使用spring-security(3.0.5.RELEASE)。此应用程序托管一个api和一些受限制的用户访问,我想使用spring-security在应用程序的两端进行身份验证。不同的身份验证方法

  • API是在MYDOMAIN/API/*
  • 限制用户的访问是MYDOMAIN /限制/ *

API认证必须经过某种API_KEY

用户接入认证完成通过登录表格完成

第一个问题是:是否有可能?
如果是的话,我该怎么办?我已经在网上看了很多东西,但我无法弄清楚如何做到这一点(除升级到春天3.1 ...)

欢迎任何帮助......

问候

+0

这显然是可行的。我现在没有足够的时间来获得正确的答案,但相信我过去做得更加复杂。如果没有人,我可能会回到这里给出完整的答案。同时,有2条建议:你会发现官方文档比google更多,阅读spring安全的源代码会有很大的帮助。 –

+0

嗨,因为我真的不想升级春天版本,并且stil无法弄清楚如何做这件事情,我希望你有时间给我答案...问候 – mimiz

+0

最后有人给了我记住的答案。我同意你应该升级Spring。这不应该是痛苦的。如果是,则可能是重新考虑构建过程的正确时间; =) –

回答

3

升级到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"