Maison > Java > javaDidacticiel > Pourquoi Spring Security ne peut-il pas restreindre correctement l'accès en fonction des rôles des utilisateurs ?

Pourquoi Spring Security ne peut-il pas restreindre correctement l'accès en fonction des rôles des utilisateurs ?

Susan Sarandon
Libérer: 2024-12-13 21:56:17
original
997 Les gens l'ont consulté

Why Can't Spring Security Properly Restrict Access Based on User Roles?

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");
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal