Spring Security OAuth2之认证服务、资源服务、web安全配置服务加载优先级详解

搭建Spring Security OAuth2认证服务,经常会遇到在资源服务器中配置生效,但是在web安全配置类中配置就不生效等等类似的问题,深入研究了下原来是三个类在IOC容器之中加载的优先级问题所造成的,下面我们就一步一步来分析下三个类的优先级问题;

@EnableAuthorizationServer注解的类继承AuthorizationServerConfigurerAdapter类配置认证服务

首先查看@EnableAuthorizationServer的源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AuthorizationServerEndpointsConfiguration.class, AuthorizationServerSecurityConfiguration.class})
public @interface EnableAuthorizationServer {
}

上面的注解引入了两个类,我们点击进入AuthorizationServerEndpointsConfiguration类中

@Configuration
@Order(0)
@Import({ClientDetailsServiceConfiguration.class, AuthorizationServerEndpointsConfiguration.class})
public class AuthorizationServerSecurityConfiguration extends WebSecurityConfigurerAdapter {
    ...

上面的注解@Order(0),也就是认证服务器配置的优先级为0

@EnableResourceServer注解的类继承ResourceServerConfigurerAdapter类配置资源服务器

点击注解@EnableResourceServer查看源码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({ResourceServerConfiguration.class})
public @interface EnableResourceServer {
}

注解中引入了ResourceServerConfiguration类,点击进入

@Configuration
public class ResourceServerConfiguration extends WebSecurityConfigurerAdapter implements Ordered {
    private int order = 3;

上面的类实现了Ordered接口,优先级为3

@EnableWebSecurity注解修饰的类继承WebSecurityConfigurerAdapter类配置web安全配置

查看WebSecurityConfigurerAdapter的源码

@Order(100)
public abstract class WebSecurityConfigurerAdapter implements WebSecurityConfigurer<WebSecurity> {

上面的类使用注解@Order,优先级为100

分析说明

  • order的值越小,类的优先级越高,IOC容器就会优先加载,上面的优先级是:认证服务器配置(0)> 资源服务器配置(3)> web安全服务配置(100)
  • 在做资源权限配置的时候应按照优先级高的来配置,否则不会生效

本文转载参考 原文 并加以调试

上一篇 Spring Security OAuth2 Redis存储token refresh_token永不过期问题解决
下一篇 Spring Security OAuth2之scopes配置详解
目录
文章列表
1 Android如何区分debug和release两种状态
Android如何区分debug和release两种状态
2
Shopify插件开发指南
Shopify插件开发指南
3
ElasticSearch 常见异常
ElasticSearch 常见异常
4
Retrofit2学习之九:与RxJava结合
Retrofit2学习之九:与RxJava结合
5
AWS Transfer Family IAM角色配置
AWS Transfer Family IAM角色配置
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。