不同URL的不同身份验证方法

时间:2012-11-13 17:14:12

标签: java spring spring-security

我在我的应用程序中使用spring-security(3.0.5.RELEASE)。这个应用程序为用户提供api和一些限制访问,我想使用spring-security在应用程序的两端进行身份验证。

  • Api在mydomain / api / *
  • 用户限制访问权限在mydomain / restricted / *

Api身份验证必须通过某种api_key

完成

用户访问身份验证由登录表单

完成

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

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

此致

1 个答案:

答案 0 :(得分:3)

升级到Spring Security 3.1确实是干净利落的最佳方式。如果你不能这样做,你仍然可以达到预期的效果,但它不会那么漂亮。如果您的资源在URL空间中完全分开(就像它们看起来那样),您可以添加仅覆盖/ api资源的第二个Spring Security过滤器,并确保它在默认值之前应用。要在Spring Security 3.0中分离配置,您需要为第二个过滤器单独的应用程序上下文,并配置过滤器以在众所周知的位置找到它 - 例如DispatcherServlet创建一个上下文并将其存储在servlet上下文中与其名称相关的属性中(以下示例中的“api”):

<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在/WEB-INF/api-servlet.xml处有一个应用程序上下文,其中包含带有id="apiSecurityFilter"的Spring Security过滤器链。

相关问题