web-dev-qa-db-fra.com

@Order (SecurityProperties.ACCESS_OVERRIDE_ORDER) vs ManagementServerProperties.ACCESS_OVERRIDE_ORDER dans Spring Security

Question1: Dans Spring Security, quelle est exactement la fonction

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)

La documentation de Spring énonce ce qui suit, mais je ne suis pas sûr de bien le comprendre

Pour remplacer les règles d'accès sans modifier aucune autre fonctionnalité autoconfigurée, ajoutez un @Bean de type WebSecurityConfigurerAdapter avec @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER).

L'ordre des différentes fonctionnalités de sécurité dans Spring Security est comme ci-dessous selon ma compréhension (la valeur la plus basse c'est-à-dire la priorité la plus élevée à la valeur la plus élevée c'est-à-dire la priorité la plus basse)

  1. Ordered.HIGHEST_PRECEDENCE = -2 ^ 31-1
  2. WebSecurityConfigurerAdapter = 100 (basé sur @Order (100) mentionné dans la documentation)
    1. Access_Override_Order = Basic_Auth_Order -2 pour Propriétés de sécurité
    2. Access_Override_Order = Basic_Auth_Order -1 pour ManagementServerPropertiesBasic_Auth_Order-2 = 2 ^ 31-7
  3. Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
  4. Ordered.LOWEST_PRECEDENCE = 2^31

Question2 Sur la base de l'ordre des différentes fonctionnalités de sécurité ci-dessus, si je veux remplacer les règles par défaut pour les points de terminaison de gestion et le reste de l'application, dois-je utiliser

  • SecurityPropertiesACCESS_OVERRIDE_ORDER ou
  • ManagementServerProperties ACCESS_OVERRIDE_ORDER?

J'utilise actuellement SecurityProperties ACCESS_OVERRIDE_ORDER mais basé sur la suggestion ici pour que ACTUATOR fonctionne, je dois activer ManagementServerProperties ACCESS_OVERRIDE_ORDER. Laquelle dois-je remplacer si je veux que les deux fonctionnent?

Merci.

11
HopeKing

Q1. Question 1: Dans Spring Security, que fait exactement l'annotation @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)?

Ce qu'il fait est bien expliqué dans la documentation que vous avez citée.

Pour remplacer les règles d'accès sans modifier aucune autre fonctionnalité autoconfigurée, ajoutez un @Bean de type WebSecurityConfigurerAdapter avec @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER).

Mais alors WebSecurityConfigurerAdapter, qui a @Order(100), a une priorité plus élevée.

Non.

Vous devez faire attention à cette partie autoconfigured features. En utilisant @EnableAutoConfiguration Qui fait partie de @SpringBootApplication, Beaucoup de choses sont auto-configurées et 100 N'est pas une valeur auto-configurée mais une valeur codée en dur sur le WebSecurityConfigurerAdapter classe.

Vous pouvez trouver les valeurs de commande utilisées pour la configuration automatique de Spring Security dans la classe SecurityProperties et vous pouvez découvrir que la valeur de ACCESS_OVERRIDE_ORDER Est la plus faible, ce qui signifie qu'elle prend la priorité la plus élevée.

Où sont-ils auto-confits?

Vous pouvez constater que @Order(SecurityProperties.BASIC_AUTH_ORDER) est utilisé dans la classe SpringBootWebSecurityConfiguration.

Alors quand l'annotation @Order(100) de WebSecurityConfigurerAdapter est-elle utilisée?

Par exemple, si vous désactivez la configuration automatique en ajoutant @EnableWebSecurity, La valeur sera utilisée. Comme la valeur 100 A une priorité trop élevée, il serait préférable de mettre l'annotation @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) dans votre classe personnalisée dans le cas.

Q2. Sur la base de l'ordre des différentes fonctionnalités de sécurité ci-dessus, si je souhaite remplacer les règles par défaut pour les points de terminaison de gestion et le reste de l'application, que dois-je utiliser

Utilisez ManagementServerProperties ACCESS_OVERRIDE_ORDER.

Il a une priorité plus élevée, vous devez donc l'utiliser si vous souhaitez remplacer les règles par défaut pour tous les points finaux. Vous pouvez voir comment les valeurs sont définies si vous ouvrez la classe ManagementServerProperties.

Dans SecurityProperties

int ACCESS_OVERRIDE_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 2; // 39
int BASIC_AUTH_ORDER = Ordered.LOWEST_PRECEDENCE - 5; // 41

Dans ManagementServerProperties

int BASIC_AUTH_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 5; // 36
int ACCESS_OVERRIDE_ORDER = ManagementServerProperties.BASIC_AUTH_ORDER - 1; // 35

Dans le commentaire, 39 Signifie 21474839, J'ai omis les 6 premiers chiffres pour plus de lisibilité.

10
Sanghyun Lee

SecurityProperties ne définit plus la constante ACCESS_OVERRIDE_ORDER pour l'annotation @Order. Cependant, Spring Boot ne définit plus de détails de sécurité si l'application le fait, nous n'avons donc pas besoin de l'annotation @Order sur la classe de sécurité @Configuration et pouvons être supprimés.

4
Ajay Khetan