@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 安全中各种安全功能的顺序如下(最低值即最高优先级到最高值即最低优先级)
Ordered.HIGHEST_PRECEDENCE
= -2^31-1
- WebSecurityConfigurerAdapter = 100(基于文档中提到的@Order(100))
Access_Override_Order = Basic_Auth_Order -2
安全属性
Access_Override_Order = Basic_Auth_Order -1
对于 ManagementServerProperties
Basic_Auth_Order-2
= 2^31-7
Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
Ordered.LOWEST_PRECEDENCE = 2^31
问题2
根据上面各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,我应该使用
- SecurityPropertiesACCESS_OVERRIDE_ORDER 或
- ManagementServerProperties ACCESS_OVERRIDE_ORDER ?
我目前正在使用 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 注释,并且可以将其删除。
问题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 安全中各种安全功能的顺序如下(最低值即最高优先级到最高值即最低优先级)
Ordered.HIGHEST_PRECEDENCE
= -2^31-1- WebSecurityConfigurerAdapter = 100(基于文档中提到的@Order(100))
Access_Override_Order = Basic_Auth_Order -2
安全属性Access_Override_Order = Basic_Auth_Order -1
对于 ManagementServerPropertiesBasic_Auth_Order-2
= 2^31-7
Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
Ordered.LOWEST_PRECEDENCE = 2^31
问题2 根据上面各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,我应该使用
- SecurityPropertiesACCESS_OVERRIDE_ORDER 或
- ManagementServerProperties ACCESS_OVERRIDE_ORDER ?
我目前正在使用 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 注释,并且可以将其删除。