问题1:在Spring Security中,该函数到底是什么?
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
Spring文档陈述以下内容,但我不确定我是否清楚理解



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

  • Ordered.HIGHEST_PRECEDENCE = -2 ^ 31-1
  • WebSecurityConfigurerAdapter = 100(基于文档中提到的@Order(100))
  • 安全属性的Access_Override_Order = Basic_Auth_Order -2
  • ManagementServerProperties的
  • Access_Override_Order = Basic_Auth_Order -1Basic_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)到底做什么?

    您引用的文档中对它的作用进行了很好的解释。



    但是具有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)批注放入自定义类中。

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

    使用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位数字。

    07-28 06:32