Spring Security 基于角色的授权问题:403 禁止错误
Spring Security 是一个功能强大的安全框架,用于保护应用程序免受恶意攻击。在使用 Spring Security 过程中,角色的授权问题可能会引发 403 禁止错误。php小编香蕉为您详细介绍了这个问题,并提供了解决方案,帮助您顺利解决角色授权的困扰。无论您是初学者还是有经验的开发者,本文都将帮助您深入理解 Spring Security 的角色授权机制,并学会正确地处理 403 禁止错误。
问题内容
问题:
我正在尝试创建一个基于 spring 的 web 服务器,并具有基于角色的身份验证,但我始终收到 403 forbidden 错误。我已经实现了自定义 userdetails
类,我怀疑我的配置可能存在问题。
代码:
自定义 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
实现:
@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(); }
我已经实现了一个自定义 userdetails
类并配置了 spring security 以进行基于角色的身份验证。但是,即使我相信角色已正确分配,我仍然遇到 403 forbidden 错误。我尝试同时使用 hasrole
和 hasauthority
类并配置了 spring security 以进行基于角色的身份验证。但是,即使我相信角色已正确分配,我仍然遇到 403 forbidden 错误。我尝试同时使用 hasrole
和 hasauthority
,但问题仍然存在。我的配置中缺少什么?
任何见解或建议将不胜感激。谢谢!
解决方法
对于具有 JWT 的资源服务器,权限由身份验证转换器设置。
默认的身份验证转换器是 JwtAuthenticarionConverter
,它将权限转换委托给可配置的权限转换器(默认使用 scope
声明中的条目添加 SCOPE_
前缀)。
您可以提供一个配置有另一个权限转换器的 JwtAuthenticationConverter
(一个使用另一个声明作为权限源),或者切换到完全不同的 Converter<Jwt,?使用 <code>http.oauth2ResourceServer 扩展 AbstractAuthenticationToken>
(oauth2-> oauth2.jwt(Jwt -> jwt.jwtAuthenticationConverter(...))
您也可以考虑这个额外的启动器我维护它使用一个可配置的权限转换器应用程序属性(除非您在conf中提供自己的权限或身份验证转换器)
您可以尝试打开spring的TRACE日志并找出问题发生的位置。这个建议可能不能直接帮助到你,但是确实帮助我们找到了迁移到Springboot3.0时API返回403的原因
以上是Spring Security 基于角色的授权问题:403 禁止错误的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

如何使用Java开发一个基于SpringSecuritySAML的单点登录系统引言:随着互联网的快速发展,越来越多的应用程序被开发出来。在这些应用程序中,用户登录是最常见的功能之一。然而,对于企业级应用程序,用户需要在多个系统中进行登录,这将导致用户的登录体验非常糟糕。为了解决这个问题,单点登录系统(SingleSign-On,简称SSO)应运而生。简

我正在尝试使用GO实现访问令牌验证。但我在网上看到的例子似乎只是用TOKEN_SECRET来验证它。但是我习惯了在Javaspring中编程,并且不需要使用TOKEN_SECRET。我只是提供jwk-set-uri,它会检查有效性(自动-安全过滤器等),我知道它与oauth服务器通信并进行此验证。Go中是否没有库可以通过向oauth服务器发出请求来检查令牌是否有效?我知道我知道我可以通过向oauth服务器的用户信息端点发出请求来手动进行此操作:http://localh

在后台管理系统中,通常需要访问权限控制,以限制不同用户对接口的访问能力。如果用户缺乏特定权限,则无法访问某些接口。本文将用waynboot-mall项目举例,给大家介绍常见后管系统如何引入权限控制框架SpringSecurity。大纲如下:waynboot-mall项目地址:https://github.com/wayn111/waynboot-mall一、什么是SpringSecuritySpringSecurity是一个基于Spring框架的开源项目,旨在为Java应用程序提供强大和灵活的安

如何使用Java开发一个基于SpringSecurityOAuth2的单点登录系统引言:随着互联网的高速发展,越来越多的网站和应用程序需要用户进行登录,而用户却不希望为每个网站或应用程序都记住一个账号和密码。单点登录系统(SingleSign-On,简称SSO)能够解决这个问题,允许用户在一次登录后,无需重复认证就可以访问多个网站和应用程序。本文将介绍

我有一个springrest服务,我想将它用于经过身份验证和未经身份验证的用户。如果用户经过身份验证,我想从securitycontextholder.getcontext().getauthentication()获取用户信息。如果我使用.antmatchers("/app/rest/question/useroperation/list/**").permitall()在ouath2配置中,如下所示,然后我可以获取用户信息经过身份验证的用户,但未经过身份验证的用户会出现40

引言在当今互联互通的世界中,RESTfulapi已成为应用程序之间进行通信的关键机制。借助Java这一强大的编程语言,您可以构建高效、可扩展且维护良好的RESTfulAPI。第1章:RESTfulAPI基础RESTful架构的原则和最佳实践Http方法、状态代码和响应标头JSON和XML等数据格式第2章:设计和建模RESTfulAPIRESTfulAPI设计原则资源建模和URI设计版本控制和HATEOAS第3章:使用SpringBoot构建RESTfulAPISpringBoot简介和入门构建和

JavaAPI开发中的一个常见需求就是实现用户的身份验证和授权功能。为了提供更加安全可靠的API服务,授权功能变得尤为重要。SpringSecurityOAuth是一个优秀的开源框架,可以帮助我们在JavaAPI中实现授权功能。本文将介绍如何使用SpringSecurityOAuth进行安全授权。什么是SpringSecurity