Spring Boot REST接口基础认证返回403 Forbidden问题求助
问题排查与解决
核心问题:权限配置不匹配
你在配置用户权限时用的是authorities("STANDARD_USER"),但在授权规则里用了hasRole("STANDARD_USER")——Spring Security的hasRole()方法会自动给角色名加上ROLE_前缀,而你定义的用户权限并没有这个前缀,导致权限校验不通过,返回403。
两种解决方法
方法一:修改用户权限配置,添加ROLE_前缀
在configure(AuthenticationManagerBuilder auth)中,把权限名改成带ROLE_的形式:
auth.inMemoryAuthentication() .withUser("john").password("{noop}1234").authorities("ROLE_STANDARD_USER") .and() .withUser("david").password("{noop}1234").authorities("ROLE_ADMIN");
这样hasRole("STANDARD_USER")就能正确匹配到ROLE_STANDARD_USER权限。
方法二:修改授权规则,使用hasAuthority()替代hasRole()
保持用户权限配置不变,把hasRole()换成hasAuthority(),因为hasAuthority()会直接匹配你定义的权限名,不会自动加前缀:
.authorizeRequests() .antMatchers(GET, "/api/**").hasAuthority("STANDARD_USER")
验证方式
修改后用Postman发送请求时,在Authorization选项卡选择Basic Auth,输入用户名john和密码1234,即可正常访问接口。
内容的提问来源于stack exchange,提问作者CodeGrinder
相关产品推荐
相关产品推荐

