Spring Security ist ein leistungsstarkes Sicherheitsframework zum Schutz von Anwendungen vor böswilligen Angriffen. Bei Verwendung von Spring Security können Rollenautorisierungsprobleme zu 403 Forbidden-Fehlern führen. Der PHP-Editor Banana stellt Ihnen dieses Problem ausführlich vor und bietet eine Lösung, die Ihnen hilft, das Problem der Rollenberechtigung erfolgreich zu lösen. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, hilft Ihnen dieser Artikel dabei, den Rollenautorisierungsmechanismus von Spring Security genau zu verstehen und zu lernen, mit 403 Forbidden-Fehlern richtig umzugehen.
Frage:
Ich versuche, einen Spring-basierten Webserver mit rollenbasierter Authentifizierung zu erstellen, erhalte jedoch ständig die Fehlermeldung 403 verboten. Ich habe eine benutzerdefinierte userdetails
-Klasse implementiert und vermute, dass ein Problem mit meiner Konfiguration vorliegt.
Code:
Anpassung 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
Umsetzung:
@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(); }
Ich habe eine benutzerdefinierte userdetails
类并配置了 spring security 以进行基于角色的身份验证。但是,即使我相信角色已正确分配,我仍然遇到 403 forbidden 错误。我尝试同时使用 hasrole
和 hasauthority
Klasse implementiert und Spring Security für die rollenbasierte Authentifizierung konfiguriert. Obwohl ich glaube, dass die Rollen korrekt zugewiesen sind, erhalte ich dennoch die Fehlermeldung 403 verboten. Ich habe versucht, sowohl hasrole
als auch hasauthority
zu verwenden, aber das Problem besteht weiterhin. Was fehlt in meiner Konfiguration?
Jede Einsicht oder Anregung wäre sehr dankbar. Danke!
Für Ressourcenserver mit JWT werden Berechtigungen vom Authentifizierungskonverter festgelegt.
Der Standard-Authentifizierungskonverter ist JwtAuthenticarionConverter
,它将权限转换委托给可配置的权限转换器(默认使用 scope
声明中的条目添加 SCOPE_
Präfix).
Sie können einen mit einem anderen Berechtigungskonverter konfigurierten Konverter bereitstellen JwtAuthenticationConverter
(一个使用另一个声明作为权限源),或者切换到完全不同的 Converterd5f3c2e320864c54a83e1ef7cadf1add
(oauth2-> oauth2.jwt(Jwt -> jwt.jwtAuthenticationConverter(...))
Sie können auch diesen zusätzlichen Starter in Betracht ziehen Ich verwalte ihn mithilfe einer konfigurierbaren Berechtigungskonverter-Anwendungseigenschaft (es sei denn, Sie geben Ihre eigene Berechtigung oder Ihren eigenen Authentifizierungskonverter in der Konfiguration an)
Sie können versuchen, die TRACE-Protokolle von Spring zu öffnen und herauszufinden, wo das Problem liegt tritt ein. Dieser Vorschlag hilft Ihnen vielleicht nicht direkt, aber er hat uns dabei geholfen, den Grund herauszufinden, warum die API bei der Migration auf Springboot3.0
403 zurückgibtDas obige ist der detaillierte Inhalt vonProblem mit der rollenbasierten Autorisierung von Spring Security: 403 Verbotener Fehler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!