@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 与 ManagementServerProperties.ACCESS_OVERRIDE_ORDER 在 Spring 安全

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) vs ManagementServerProperties.ACCESS_OVERRIDE_ORDER in Spring Security

问题1:在SpringSecurity中,函数到底是什么

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)

Spring 文档说明如下,但我不确定我是否理解清楚

To override the access rules without changing any other autoconfigured features add a @Bean of type WebSecurityConfigurerAdapter with @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER).

根据我的理解,Spring 安全中各种安全功能的顺序如下(最低值即最高优先级到最高值即最低优先级)

  1. Ordered.HIGHEST_PRECEDENCE = -2^31-1
  2. WebSecurityConfigurerAdapter = 100(基于文档中提到的@Order(100))
    1. Access_Override_Order = Basic_Auth_Order -2 安全属性
    2. Access_Override_Order = Basic_Auth_Order -1 对于 ManagementServerProperties Basic_Auth_Order-2 = 2^31-7
  3. Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
  4. Ordered.LOWEST_PRECEDENCE = 2^31

问题2 根据上面各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,我应该使用

我目前正在使用 SecurityProperties ACCESS_OVERRIDE_ORDER,但根据建议 here 让 ACTUATOR 工作,我需要启用 ManagementServerProperties ACCESS_OVERRIDE_ORDER。如果我想让两者都起作用,我应该覆盖哪一个?

谢谢。

Q1。问题1:在Spring Security中,注解@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)到底是做什么的?

它的作用在您引用的文档中有很好的解释。

To override the access rules without changing any other autoconfigured features add a @Bean of type WebSecurityConfigurerAdapter with @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER).

但是 WebSecurityConfigurerAdapter 具有 @Order(100),具有更高的优先级。

没有

这部分你要小心autoconfigured features。使用 @SpringBootApplication 的一部分 @EnableAutoConfiguration,很多东西都是自动配置的,100 不是自动配置的值,而是 [=14= 上的硬编码值] class.

您可以在SecurityProperties class中找到用于Spring安全自动配置的顺序值,您可以发现ACCESS_OVERRIDE_ORDER的值是最低的这意味着它具有最高优先级。

它们在哪里自动配置?

可以发现@Order(SecurityProperties.BASIC_AUTH_ORDER)用在了SpringBootWebSecurityConfiguration class.

WebSecurityConfigurerAdapter的注解@Order(100)是什么时候使用的呢?

例如,如果您通过添加 @EnableWebSecurity 禁用自动配置,则会使用该值。由于100值的优先级太高,所以最好在case的自定义class中加上@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)注解。

Q2。根据上面各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,我应该使用什么

使用ManagementServerProperties ACCESS_OVERRIDE_ORDER.

它具有更高的优先级,因此如果您想覆盖所有端点的默认规则,则必须使用它。如果您打开 ManagementServerProperties class.

,您可以看到这些值是如何设置的

SecurityProperties

int ACCESS_OVERRIDE_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 2; // 39
int BASIC_AUTH_ORDER = Ordered.LOWEST_PRECEDENCE - 5; // 41

ManagementServerProperties

int BASIC_AUTH_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 5; // 36
int ACCESS_OVERRIDE_ORDER = ManagementServerProperties.BASIC_AUTH_ORDER - 1; // 35

在评论中,39表示21474839,为了便于阅读,我省略了前6位数字。

SecurityProperties 不再为 @Order 注释定义 ACCESS_OVERRIDE_ORDER 常量。但是,Spring Boot 不再定义任何安全细节(如果应用程序定义的话),因此我们不需要在安全 @Configuration class 上添加 @Order 注释,并且可以将其删除。