Résoudre les problèmes de rôle dans Spring Security
Problème :
Lors de la mise en œuvre de Spring Security dans un projet, on observe que les utilisateurs avec uniquement le rôle « utilisateur » peuvent accéder aux ressources spécifiques à l'administrateur. Le problème suspecté réside dans la requête d'authentification de l'utilisateur.
Analyse :
La configuration tente de s'authentifier à la fois en fonction de la mémoire et de JDBC. La requête de récupération des autorités est configurée avec "select users_username, role_id from role_users which users_username=?" et préfixe les rôles avec "ROLE_".
Cause :
Cependant, le problème provient d'une erreur logique dans l'ordre des correspondances d'autorisation. Le matcher "anyRequest().authenticated()" est placé à tort avant "antMatchers("/users/all").hasRole("admin")", permettant l'accès à tous les utilisateurs authentifiés, quels que soient leurs rôles.
Solution :
Pour résoudre ce problème, les règles d'autorisation doivent être réorganisées pour suivre l'ordre spécifié dans la documentation Spring Security. La configuration modifiée ci-dessous corrige l'erreur :
@Override 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 modification, seuls les utilisateurs ayant le rôle "admin" auront accès à "/users/all", et les utilisateurs non-administrateurs ne pourront pas accéder à accéder à des ressources protégées.
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!