您可以为不同的 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。