我在我的应用程序中使用 spring-security (3.0.5.RELEASE)。该应用程序托管一个 api 和一些对用户的限制访问,我想使用 spring-security 在应用程序的两侧进行身份验证。
- API 位于 mydomain/api/*
- 用户受限访问位于 mydomain/restricted/*
API 身份验证必须通过某种 api_key 来完成
用户访问认证通过登录表单完成
第一个问题是:这可能吗?
如果是,我该怎么做?我在网上读了很多东西,但我不知道该怎么做(除了升级到 spring 3.1 ...)
欢迎任何帮助...
问候
最佳答案
升级到 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"
的 Spring Security 过滤器链>.
关于java - 不同的url采用不同的认证方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365400/