Spring5授权未按预期工作

rnmwe5a2  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(287)

我对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端点?
任何帮助都将不胜感激。

ecbunoof

ecbunoof1#

我在控制台日志中没有看到任何错误,有没有办法知道为什么springsecurity会显示403错误?
通过启用spring调试日志,可以通过简单的google搜索或在spring文档中找到如何做到这一点。学习调试应用程序(调试应用程序应该始终是您学习的第一件事,并且应该在询问堆栈溢出之前完成)。
上面的spring安全配置有什么问题,因为我无法访问restapi端点?
可能有几个问题,因为您没有透露如何访问应用程序。通过curl,web浏览器,在react应用程序中使用fetch的另一个webclient等也应该包含在询问堆栈溢出时,这样人们就可以重现手头的问题。
但是列出一些可能出错的事情:
你的请求做得不对
您的密码可能不正确,因为我看到您的密码加密不正确(请参阅如何实际加密的文档)
确保您的密码以正确的前缀存储,或使用 UserBuilder users = User.withDefaultPasswordEncoder(); 在文档中构建用户时。
如果要遵循任何标准,则应定义不带前缀或后缀的角色(\u role)
登录后是否重定向到不允许访问的内容?
正如您所看到的,有几件事情可能是错误的,但是您提供的信息太少,无法回答,在询问堆栈溢出之前,您可以做很多事情。
因为这个问题很模糊,所以答案很模糊。

相关问题