问题1: 在Spring Security中,确切的功能是什么
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
Spring文档陈述以下内容,但我不确定我是否清楚理解
要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加一个WebSecurityConfigurerAdapter类型的@Bean @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)。
根据我的理解,Spring Security中各种安全功能的顺序如下(最低值,即最高优先级到最高值,即最低优先级)
Ordered.HIGHEST_PRECEDENCE
Access_Override_Order = Basic_Auth_Order -2
Access_Override_Order = Basic_Auth_Order -1
Basic_Auth_Order-2
Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
Ordered.LOWEST_PRECEDENCE = 2^31
Question2 根据上述各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,则应使用
我目前正在使用,SecurityProperties ACCESS_OVERRIDE_ORDER但根据这里的建议 ,我需要启用ACTUATOR ManagementServerProperties ACCESS_OVERRIDE_ORDER。如果我两个都想工作,应该覆盖哪一个?
SecurityProperties ACCESS_OVERRIDE_ORDER
ManagementServerProperties ACCESS_OVERRIDE_ORDER
谢谢。
Security中,注释的作用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)是什么?
您引用的文档中对它的作用进行了很好的解释。
但是WebSecurityConfigurerAdapter,具有的@Order(100)优先级更高。
WebSecurityConfigurerAdapter
@Order(100)
没有。
您应该对此部分小心autoconfigured features。使用@EnableAutoConfiguration,它是的一部分@SpringBootApplication,很多东西是自动配置的,100不是自动配置的值,而是类上的硬编码值WebSecurityConfigurerAdapter。
autoconfigured features
@EnableAutoConfiguration
@SpringBootApplication
100
您可以在SecurityProperties类中找到用于自动配置Spring Security的订单值,并且可以发现的值ACCESS_OVERRIDE_ORDER最低,这意味着它具有最高优先级。
SecurityProperties
ACCESS_OVERRIDE_ORDER
他们在哪里自动确认?
您可以找到@Order(SecurityProperties.BASIC_AUTH_ORDER)在SpringBootWebSecurityConfiguration课堂上使用的那个。
@Order(SecurityProperties.BASIC_AUTH_ORDER)
SpringBootWebSecurityConfiguration
然后,当被注释@Order(100)的WebSecurityConfigurerAdapter使用呢?
例如,如果通过添加禁用自动配置@EnableWebSecurity,则将使用该值。由于该值的100优先级过高,因此最好@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)在您的自定义类中添加注释。
@EnableWebSecurity
使用ManagementServerProperties ACCESS_OVERRIDE_ORDER。
它具有更高的优先级,因此如果要覆盖所有端点的默认规则,则必须使用它。如果您打开ManagementServerProperties类,则可以看到如何设置值。
ManagementServerProperties
在 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位数字。
39
21474839