2

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

  • Api 在 mydomain/api/*
  • 用户受限访问位于 mydomain/restricted/*

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

用户访问认证由登录表单完成

第一个问题是:有可能吗?
如果是,我该怎么做?我在互联网上阅读了很多东西,但我不知道该怎么做(除了升级到 spring 3.1 ...)

欢迎任何帮助...

问候

4

1 回答 1

3

升级到 Spring Security 3.1 确实是干净利落的最佳方式。如果你不能这样做,你仍然可以达到预期的结果,但它不会那么漂亮。如果您的资源在 URL 空间中完全分离(看起来如此),您可以添加第二个 Spring Security 过滤器,仅覆盖 /api 资源,并确保它在默认资源之前应用。要在 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".

于 2012-11-13T18:13:36.320 回答