问题1:在Spring Security中,功能究竟是什么
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
Spring文档陈述如下,但我不确定我是否理解清楚
要在不更改任何其他自动配置功能的情况下覆盖访问规则,请使用
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
添加类型为WebSecurityConfigurerAdapter的@Bean。
Spring Security中各种安全功能的排序如下所述(LowestValue,即最高优先级,即最高优先级)
Ordered.HIGHEST_PRECEDENCE
= -2 ^ 31-1Access_Override_Order = Basic_Auth_Order -2
为安全属性
Access_Override_Order = Basic_Auth_Order -1
for ManagementServerProperties Basic_Auth_Order-2
= 2 ^ 31-7Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
Ordered.LOWEST_PRECEDENCE = 2^31
问题2根据上面各种安全功能的排序,如果我想覆盖管理端点和应用程序其余部分的默认规则,我应该使用
我目前正在使用SecurityProperties ACCESS_OVERRIDE_ORDER
,但根据建议here让ACTUATOR工作,我需要启用ManagementServerProperties ACCESS_OVERRIDE_ORDER
。如果我想要两个都工作,我应该覆盖哪一个?
谢谢。
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
do?它所做的工作在你引用的文档中得到了很好的解释。
要在不更改任何其他自动配置功能的情况下覆盖访问规则,请使用
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
添加类型为WebSecurityConfigurerAdapter的@Bean。
但是,拥有WebSecurityConfigurerAdapter
的@Order(100)
优先考虑。
没有。
你应该小心这部分autoconfigured features
。使用@EnableAutoConfiguration
是@SpringBootApplication
的一部分,很多东西都是自动配置的,100
不是自动配置的值,而是WebSecurityConfigurerAdapter
类的硬编码值。
您可以在SecurityProperties
类中找到用于自动配置Spring Security的订单值,您可以发现ACCESS_OVERRIDE_ORDER
的值最低,这意味着它具有最高优先级。
他们在哪里自动配置?
你可以发现@Order(SecurityProperties.BASIC_AUTH_ORDER)
用于SpringBootWebSecurityConfiguration
类。
那么什么时候使用@Order(100)
的注释WebSecurityConfigurerAdapter
?
例如,如果通过添加@EnableWebSecurity
禁用自动配置,则将使用该值。由于100
的值太高优先级,所以最好将@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
注释放在自定义类中。
使用ManagementServerProperties ACCESS_OVERRIDE_ORDER
。
它需要更高的优先级,因此如果要覆盖所有端点的默认规则,则必须使用它。如果打开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位数字。
SecurityProperties不再为@Order注释定义ACCESS_OVERRIDE_ORDER常量。但是,如果应用程序执行,Spring Boot不再定义任何安全性详细信息,因此我们不需要在安全性@Configuration类上使用@Order注释,并且可以将其删除。