spring-security Sping Boot 中的基本REST身份验证

ou6hu8tu  于 2022-11-11  发布在  Spring
关注(0)|答案(2)|浏览(191)

我正在使用Sping Boot 和REST API。
我只想在我的应用程序中应用一些基本的身份验证和授权。
不幸的是, Postman 返回403 -禁止。
我会很感激你的帮助。代码:
第一个
我正在接收此消息:x1c 0d1x
有趣的是当我把规则改为:

.antMatchers(GET, "/api/**").permitAll()

然后我看到了正确的回答。看起来这个模式起作用了。

kninwzqo

kninwzqo1#

在Spring Security中,角色是一种带有前缀ROLE_的权限。
您为用户提供了权限STANDARD_USER,但由于它不是以ROLE_开头,因此它不是一个角色,而只是一个权限。
这意味着以下配置将不起作用:

.antMatchers(GET, "/api/**").hasRole("STANDARD_USER")

若要修正此问题,请给予您的使用者ROLE_STANDARD_USER权限,或将hasRole("STANDARD_USER")变更为hasAuthority("STANDARD_USER")

oogrdqng

oogrdqng2#

我改了暗语:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
            .withUser("john").password("{noop}1234").roles("STANDARD_USER")
            .and()
            .withUser("david").password("{noop}1234").roles("ADMIN");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    //super.configure(http);
    http.httpBasic()
            .and()
            .authorizeHttpRequests()
            .antMatchers(GET, "/api/**").hasRole("STANDARD_USER")
            .and()
            .authorizeHttpRequests().anyRequest().denyAll()
            .and()
            .csrf().disable()
            .formLogin().disable();
}

很好用。谢谢。

相关问题