我对springsecurity很陌生,在我的一个示例中,我们使用了下面的springsecurity5.4.5和springboot。
我在下面的spring security config类中尝试在restapi的/user和/admin端点中应用spring安全身份验证/授权。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
PasswordEncoder bcryptPasswordEncoder;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.anonymous().principal("guest").authorities("GUEST_ROLE")//Provide the name and role to the annonymous user
.and()
.authorizeRequests()
.antMatchers("/register").anonymous()//allows registration page to be accessed by annonymous users only
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET,"/admin").hasAnyRole("ADMIN_ROLE")
.antMatchers(HttpMethod.GET,"/user").hasAnyRole("STUDENT_ROLE", "ADMIN_ROLE")
.and()
.httpBasic();
}
@Override
@Bean
protected UserDetailsService userDetailsService() {
UserDetails annaSmithUserDetails = User.builder()
.username("annasmith")
.password(bcryptPasswordEncoder.encode("password"))//default password enoder is bcrypt
.roles("STUDENT_ROLE", "ADMIN_ROLE") //role of the user
.authorities("STUDENT_READ","STUDENT_WRITE","COURSE_READ","COURSE_WRITE") //authorities or we can say permission assigned to the user
.build();
return new InMemoryUserDetailsManager(annaSmithUserDetails);//can configure different
}
}
根据上面的spring配置,user和admin角色都可以访问/user,admin角色可以访问/admin。
当我试图在浏览器中访问/user时,它会显示用户名和密码弹出窗口,一旦我输入了配置用户的正确凭据,它就不起作用,并给出403错误。
我有以下三个问题
我在控制台日志中没有看到任何错误,有没有办法知道为什么springsecurity会显示403错误?
上面的spring安全配置有什么问题,因为我无法访问restapi端点?
任何帮助都将不胜感激。
1条答案
按热度按时间ecbunoof1#
我在控制台日志中没有看到任何错误,有没有办法知道为什么springsecurity会显示403错误?
通过启用spring调试日志,可以通过简单的google搜索或在spring文档中找到如何做到这一点。学习调试应用程序(调试应用程序应该始终是您学习的第一件事,并且应该在询问堆栈溢出之前完成)。
上面的spring安全配置有什么问题,因为我无法访问restapi端点?
可能有几个问题,因为您没有透露如何访问应用程序。通过curl,web浏览器,在react应用程序中使用fetch的另一个webclient等也应该包含在询问堆栈溢出时,这样人们就可以重现手头的问题。
但是列出一些可能出错的事情:
你的请求做得不对
您的密码可能不正确,因为我看到您的密码加密不正确(请参阅如何实际加密的文档)
确保您的密码以正确的前缀存储,或使用
UserBuilder users = User.withDefaultPasswordEncoder();
在文档中构建用户时。如果要遵循任何标准,则应定义不带前缀或后缀的角色(\u role)
登录后是否重定向到不允许访问的内容?
正如您所看到的,有几件事情可能是错误的,但是您提供的信息太少,无法回答,在询问堆栈溢出之前,您可以做很多事情。
因为这个问题很模糊,所以答案很模糊。