Java @顺序(SecurityProperty.ACCESS\u OVERRIDE\u Order)与Spring Security中的ManagementServerProperties.ACCESS\u OVERRIDE\u Order
问题1:在Spring Security中,具体的功能是什么Java @顺序(SecurityProperty.ACCESS\u OVERRIDE\u Order)与Spring Security中的ManagementServerProperties.ACCESS\u OVERRIDE\u Order,java,spring,spring-mvc,spring-security,spring-boot-actuator,Java,Spring,Spring Mvc,Spring Security,Spring Boot Actuator,问题1:在Spring Security中,具体的功能是什么 @Order(securityproperty.ACCESS\u OVERRIDE\u Order) Spring文档说明了以下内容,但我不确定自己是否理解得很清楚 要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加具有@Order(SecurityProperties.access\u override\u Order)的WebSecurityConfigureAdapter类型的@Bean 根据我的理解,Spring se
@Order(securityproperty.ACCESS\u OVERRIDE\u Order)
Spring文档说明了以下内容,但我不确定自己是否理解得很清楚
要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加具有@Order(SecurityProperties.access\u override\u Order)
的WebSecurityConfigureAdapter类型的@Bean
根据我的理解,Spring security中各种安全功能的顺序如下(最低值,即最高优先级到最高值,即最低优先级)
有序。最高优先级
=-2^31-1Access\u Override\u Order=Basic\u Auth\u Order-2
用于安全属性Basic\u Auth\u Order-2
=2^31-7Basic\u Auth\u Order=Ordered.lower\u predennce-5=2^31-5
Ordered.lower\u优先级=2^31
- SecurityProperties访问\u覆盖\u顺序或
- ManagementServerProperties访问\u覆盖\u顺序
SecurityProperties访问\u覆盖\u顺序
,但基于让执行器工作的建议,我需要启用ManagementServerProperties访问\u覆盖\u顺序
。如果我希望两者都工作,我应该覆盖哪一个
谢谢。Q1。问题1:在Spring安全性中,注释@Order(securityproperty.ACCESS\u OVERRIDE\u Order)
到底做了什么?
它的作用在您引用的文档中有很好的解释
要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加具有@Order(SecurityProperties.access\u override\u Order)
的WebSecurityConfigureAdapter类型的@Bean
但是具有@Order(100)
的Web安全配置适配器具有更高的优先级。
没有
您应该小心这部分自动配置的功能
。使用@EnableAutoConfiguration
这是@SpringBootApplication
的一部分,很多东西都是自动配置的,100
不是自动配置的值,而是WebSecurityConfigurerAdapter
类上的硬编码值
您可以在SecurityProperties
类中找到用于自动配置Spring Security的顺序值,您可以发现ACCESS\u OVERRIDE\u order
的值是最低的,这意味着它具有最高的优先级
它们在哪里自动确认?
您可以发现@Order(securityproperty.BASIC\u AUTH\u Order)
用于SpringBootWebSecurityConfiguration
类
那么什么时候使用websecurityConfigureAdapter
的注释@Order(100)
例如,如果通过添加@EnableWebSecurity
禁用自动配置,则将使用该值。由于值100
的优先级太高,因此最好将@Order(SecurityProperties.ACCESS\u OVERRIDE\u Order)
注释放入案例中的自定义类中
问题2。根据以上各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,我应该使用什么
使用ManagementServerProperties访问\u覆盖\u顺序
它具有更高的优先级,因此如果要覆盖所有端点的默认规则,则必须使用它。如果打开ManagementServerProperties
类,您可以看到这些值是如何设置的
在securityproperty中
int ACCESS_OVERRIDE_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 2; // 39
int BASIC_AUTH_ORDER = Ordered.LOWEST_PRECEDENCE - 5; // 41
int BASIC_AUTH_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 5; // 36
int ACCESS_OVERRIDE_ORDER = ManagementServerProperties.BASIC_AUTH_ORDER - 1; // 35
在ManagementServerProperties中
int ACCESS_OVERRIDE_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 2; // 39
int BASIC_AUTH_ORDER = Ordered.LOWEST_PRECEDENCE - 5; // 41
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注释定义访问覆盖顺序常量。但是,如果应用程序定义了任何安全细节,Spring Boot将不再定义任何安全细节,因此我们不需要security@Configuration类上的@Order注释,并且可以将其删除。似乎securityproperty.ACCESS\u OVERRIDE\u Order不再存在。我们可以使用securityproperty.BASIC\u AUTH\u ORDER-2来实现相同的效果?