Spring安全性和API版本控制

时间:2013-02-26 06:41:44

标签: spring-security jersey

我正在使用Jersey RESTful应用程序构建一个带有Spring Security的身份验证层。 Jersey应用程序是一个“版本化”API,它根据Content-Type路由到正确的版本处理程序。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以为不同的API版本定义不同的过滤器链,并使用RequestMatcher根据请求的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。