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)
Ordered.HIGHEST_PRECEDENCE
= -2 ^ 31-1Access_Override_Order = Basic_Auth_Order -2
pour Propriétés de sécuritéAccess_Override_Order = Basic_Auth_Order -1
pour ManagementServerPropertiesBasic_Auth_Order-2
= 2 ^ 31-7Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
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
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.
@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.
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é.
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.