Maison >Java >javaDidacticiel >Pourquoi mes autorisations basées sur les rôles Spring Security échouent-elles ?

Pourquoi mes autorisations basées sur les rôles Spring Security échouent-elles ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 02:28:09953parcourir

Why Are My Spring Security Role-Based Authorizations Failing?

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!

Déclaration:
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