1

我正在 Jersey RESTful 应用程序之上使用 Spring Security 构建身份验证层。Jersey 应用程序是一个“版本化”的 API,它基于Content-Type.

我的问题是:由于不同的 API 版本会有不同的身份验证机制,那么在 Spring Security 中处理这个问题的最佳方法是什么?我应该AuthenticationFilter为每种身份验证机制设置不同的吗?我是否应该在 Spring Security 层构建知识,AuthenticationFilter每个版本应该应用哪个 ( Content-Type)?

谢谢!

4

1 回答 1

2

您可以为不同的 API 版本定义不同的过滤器链,并根据请求RequestMatcher的标头使用 a 进行匹配。Content-Type

<bean id="apiV1Matcher" class="org.springframework.security.web.util.ELRequestMatcher">
    <constructor-arg value="hasHeader('Content-Type','<pattern for api v1>')"/>
</bean>

<bean id="apiV2Matcher" class="org.springframework.security.web.util.ELRequestMatcher">
    <constructor-arg value="hasHeader('Content-Type','<pattern for api v2>')"/>
</bean>

<security:http request-matcher-ref="apiV1Matcher" ...>
    <!-- config for api v1 requests -->
</security:http>

<security:http request-matcher-ref="apiV2Matcher" ...>
    <!-- config for api v2 requests -->
</security:http>

如果这导致过多的重复,请不要使用命名空间配置并尽可能在过滤器链之间共享 bean。

于 2013-02-26T06:50:28.653 回答