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
875 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!

source:php.cn
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