目录
一、简介
我们希望微服务通过OAuth2+jwt的模式进行验证,但是有些资源我们并不想通过OAuth2+jwt进行验证,比如访问swagger和actuator端点,这些资源我们希望进行Basic验证。
二、知识点
-
@Order
spring security的验证是通过fliter链进行的,我们实现相应的ConfigurerAdapter就能自定义自己的fliter,我们通过@Order设置它在fliter链中的调用顺序。一般Basic验证应该先与其它验证
-
httpSecurity与authorizeRequests设置的区别
我们先看如下代码有什么不同
http.requestMatcher(EndpointRequest.toAnyEndpoint())
http.antMatcher(SWAGGER_URL)
http.authorizeRequests().requestMatcher(EndpointRequest.toAnyEndpoint())
http.authorizeRequests().antMatcher(SWAGGER_URL)
直接在http上定义,表明整个ConfigurerAdapter作用的资源。注意,这里requestMatcher和antMatcher只能传递一个参数。
在authorizeRequests上定义,表明实际需要控制权限的资源,往往其后需要跟authenticated和permitAll方法。
三、解决方案
有了以上知识点,解决方案也就很容易想出来了。Basic验证,OAuth2验证服务器,OAuth2资源服务器分别实现一个ConfigurerAdapter,通过在http上定义requestMatcher或antMatcher来进行区分资源。最后用@Order,把Basic验证的fliter设置在前面。
Basic验证
@Order(1)
@Configuration
@EnableWebSecurity
public class ServerWebSecuri