Maison >Java >javaDidacticiel >Pourquoi mes autorisations basées sur les rôles Spring Security échouent-elles ?
Correction de l'autorisation de rôle dans Spring Security
Spring Security offre des mécanismes d'autorisation robustes, mais des configurations incorrectes peuvent entraîner des vulnérabilités de sécurité. Cet article aborde un problème courant selon lequel les utilisateurs dotés de rôles limités peuvent accéder aux ressources réservées aux administrateurs.
L'extrait de code fourni configure Spring Security en utilisant à la fois l'authentification en mémoire et l'authentification JDBC. Alors que le problème est attribué au nom d'utilisateur sélectionné, au mot de passe, 1 des utilisateurs où username=? requête, le véritable coupable se trouve ailleurs.
Le problème vient de l'ordre des matchers dans la méthode authorizeRequests(). Spring Security évalue les correspondants dans l'ordre et la première correspondance détermine la décision d'autorisation. Dans ce cas, le matcher suivant :
.anyRequest().authenticated()
est placé avant le matcher basé sur les rôles :
.antMatchers("/users/all").hasRole("admin")
De ce fait, toutes les requêtes sont autorisées tant que l'utilisateur est authentifié , quel que soit leur rôle. Pour résoudre ce problème, réorganisez les matchers afin que le matcher basé sur le rôle soit prioritaire :
protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .httpBasic() .and() .authorizeRequests() .antMatchers("/users/all").hasRole("admin") .anyRequest().authenticated() .and() .formLogin() .and() .exceptionHandling().accessDeniedPage("/403"); }
Avec cette configuration révisée, les utilisateurs ayant uniquement le rôle "user" se verront refuser l'accès à "/users/all". tandis que les utilisateurs avec le rôle « admin » y auront accès.
Il est important de se rappeler l'ordre des correspondants lors de la configuration de l'autorisation Spring Security pour garantir que les politiques de sécurité prévues sont appliqué.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!