Problème d'autorisation basée sur les rôles Spring Security : erreur 403 interdite
Spring Security est un puissant cadre de sécurité pour protéger les applications contre les attaques malveillantes. Lors de l'utilisation de Spring Security, des problèmes d'autorisation de rôle peuvent provoquer des erreurs 403 Forbidden. L'éditeur PHP Banana vous présente ce problème en détail et propose une solution pour vous aider à résoudre avec succès le problème de l'autorisation de rôle. Que vous soyez un développeur débutant ou expérimenté, cet article vous aidera à comprendre en profondeur le mécanisme d'autorisation de rôle de Spring Security et à apprendre à gérer correctement les erreurs 403 interdites.
Contenu de la question
Question :
J'essaie de créer un serveur Web basé sur Spring avec une authentification basée sur les rôles, mais je reçois toujours une erreur 403 interdite. J'ai implémenté une classe userdetails
personnalisée et je soupçonne qu'il pourrait y avoir un problème avec ma configuration.
Code :
Personnalisation userdetails
:
public class customuserdetails implements userdetails { private static final long serialversionuid = 1l; private final user user; public customuserdetails(user user) { this.user = user; } @override public collection<? extends grantedauthority> getauthorities() { return user.getroles().stream().map(r -> new simplegrantedauthority("role_" + r.getname())).tolist(); } // ... other userdetails methods }
securityfilterchain
Mise en œuvre :
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http .csrf(csrf -> csrf.disable()) .sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(requests -> requests .requestMatchers("/api/**").permitAll() .requestMatchers("/secret/**").hasAuthority("USER") .anyRequest().authenticated()) .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())) .addFilterBefore(authorizeFilter, UsernamePasswordAuthenticationFilter.class) .build(); }
J'ai implémenté une classe userdetails
类并配置了 spring security 以进行基于角色的身份验证。但是,即使我相信角色已正确分配,我仍然遇到 403 forbidden 错误。我尝试同时使用 hasrole
和 hasauthority
personnalisée et configuré la sécurité Spring pour l'authentification basée sur les rôles. Cependant, même si je pense que les rôles sont correctement attribués, j'obtiens toujours une erreur 403 interdite. J'ai essayé d'utiliser à la fois hasrole
et hasauthority
mais le problème persiste. Qu'est-ce qui manque dans ma configuration ?
Toutes les idées ou suggestions seraient grandement appréciées. Merci!
Solution
Pour les serveurs de ressources avec JWT, les autorisations sont définies par le convertisseur d'authentification.
Le convertisseur d'authentification par défaut est le préfixe JwtAuthenticarionConverter
,它将权限转换委托给可配置的权限转换器(默认使用 scope
声明中的条目添加 SCOPE_
).
Vous pouvez en fournir un configuré avec un autre convertisseur d'autorisation JwtAuthenticationConverter
(一个使用另一个声明作为权限源),或者切换到完全不同的 Converter<Jwt,?使用 <code>http.oauth2ResourceServer 扩展 AbstractAuthenticationToken>
(oauth2-> oauth2.jwt(Jwt -> jwt.jwtAuthenticationConverter(...))
Vous pouvez également envisager ce démarreur supplémentaire Je le maintiens à l'aide d'une propriété d'application de convertisseur d'autorisation configurable (sauf si vous fournissez votre propre convertisseur d'autorisation ou d'authentification dans la conf)
Vous pouvez essayer d'ouvrir les journaux TRACE de Spring et découvrir où se trouve le problème se produit. Cette suggestion ne vous aidera peut-être pas directement, mais elle nous a aidé à trouver la raison pour laquelle l'API renvoie 403 lors de la migration vers Springboot3.0
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

我有下面的代码:publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{returnhttp.httpBasic().disable().cors().and().csrf().disable().authorizeHttpRequests().requestMatchers("

Comment utiliser Java pour développer un système d'authentification unique basé sur SpringSecuritySAML Introduction : Avec le développement rapide d'Internet, de plus en plus d'applications sont développées. Dans ces applications, la connexion des utilisateurs est l'une des fonctionnalités les plus courantes. Cependant, pour les applications de niveau entreprise, les utilisateurs doivent se connecter à plusieurs systèmes, ce qui entraînera une très mauvaise expérience de connexion. Afin de résoudre ce problème, le système d'authentification unique (SingleSign-On, appelé SSO) a vu le jour. simple

J'essaie d'implémenter la validation du jeton d'accès à l'aide de GO. Mais les exemples que j'ai vus en ligne semblent simplement utiliser TOKEN_SECRET pour le vérifier. Mais je suis habitué à programmer dans Javaspring et je n'ai pas besoin d'utiliser TOKEN_SECRET. Je fournis simplement le jwk-set-uri et il vérifie la validité (filtres de sécurité automatique, etc.) et je sais qu'il parle au serveur oauth et effectue cette validation. N'y a-t-il pas de bibliothèque dans Go pour vérifier si le token est valide en faisant une requête au serveur oauth ? Je sais que je peux le faire manuellement en faisant une requête au point de terminaison userinfo du serveur oauth : http://localh

Dans les systèmes de gestion back-end, le contrôle des autorisations d'accès est généralement requis pour limiter la capacité des différents utilisateurs à accéder aux interfaces. Si un utilisateur ne dispose pas d'autorisations spécifiques, il ne peut pas accéder à certaines interfaces. Cet article utilisera le projet waynboot-mall comme exemple pour présenter comment les systèmes de gestion back-end courants introduisent le cadre de contrôle des autorisations SpringSecurity. Le schéma est le suivant : Adresse du projet waynboot-mall : https://github.com/wayn111/waynboot-mall 1. Qu'est-ce que SpringSecurity SpringSecurity est un projet open source basé sur le framework Spring, visant à fournir une sécurité puissante et flexible ? pour les applications Java.

Comment utiliser Java pour développer un système d'authentification unique basé sur SpringSecurityOAuth2 Introduction : Avec le développement rapide d'Internet, de plus en plus de sites Web et d'applications nécessitent que les utilisateurs se connectent, mais les utilisateurs ne veulent pas se souvenir de chaque site Web ou application. Un numéro de compte et un mot de passe. Le système d'authentification unique (SingleSign-On, appelé SSO) peut résoudre ce problème, permettant aux utilisateurs d'accéder à plusieurs sites Web et applications sans authentification répétée après s'être connectés une fois. Cet article présentera

Introduction Dans le monde interconnecté d'aujourd'hui, les API RESTful sont devenues un mécanisme clé de communication entre les applications. Avec Java, un langage de programmation puissant, vous pouvez créer des API RESTful efficaces, évolutives et bien entretenues. Chapitre 1 : Principes de base de RESTfulAPI et meilleures pratiques de l'architecture RESTful Méthodes HTTP, codes d'état et en-têtes de réponse Formats de données tels que JSON et XML Chapitre 2 : Conception et modélisation de RESTfulAPI Principes de conception de RESTfulAPI Modélisation des ressources et conception d'URI Contrôle de version et HATEOAS Chapitre 3 : Utilisation SpringBoot pour créer l'API RESTful Introduction à SpringBoot et démarrage de la création et

J'ai un service Springrest et je souhaite l'utiliser à la fois pour les utilisateurs authentifiés et non authentifiés. Si l'utilisateur est authentifié, je souhaite obtenir les informations utilisateur de securitycontextholder.getcontext().getauthentication(). Si j'utilise .antmatchers("/app/rest/question/useroperation/list/**").permitall() dans la configuration ouath2 comme indiqué ci-dessous, je peux alors obtenir les informations utilisateur de l'utilisateur authentifié, mais pas les utilisateurs authentifiés. apparaîtra 40

Vue.js et Spring Boot interagissent via : API RESTful : Vue.js utilise Axios pour envoyer des requêtes HTTP asynchrones, et Spring Boot fournit une implémentation d'API RESTful. Transmission de données : les données sont transmises via des requêtes et des réponses, telles que le corps de la requête ou les paramètres de requête. Méthode de requête : les méthodes de requête HTTP telles que GET, POST, PUT et DELETE sont utilisées pour spécifier l'opération. Routage : l'annotation Spring Boot @RequestMapping définit le routage du contrôleur et Vue.js utilise Vue Router pour définir le routage de l'interface. Gestion de l'état : Vu