春季启动REST安全配置角色无法正常运行

时间:2019-01-04 21:20:19

标签: rest http spring-boot spring-security basic-authentication

只有具有管理员角色的用户应该可以在“用户/全部”上发出请求,但是基本用户也可以。 这是我的安全配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

    http
            .authorizeRequests()
            .antMatchers(HttpMethod.POST, "/users/**").permitAll()
            .antMatchers( "/users/all").authenticated().anyRequest().hasAnyRole("ADMIN")
            .antMatchers("/users/me").authenticated().anyRequest().hasAnyRole("ADMIN", "BASIC_USER")
            .and()
            .formLogin().disable()
            .httpBasic();
}

This is the request from Postman

为什么我可以向基本用户发出请求?

如果我按此顺序放置它们:

.antMatchers( "/users/all").authenticated().anyRequest().hasAnyRole("ADMIN")
 .antMatchers("/users/me").authenticated().anyRequest().hasAnyRole("ADMIN", "BASIC_USER")
  .antMatchers(HttpMethod.POST, "/users/**").permitAll()

是同一回事,但是/ me请求不再起作用。

/all request /me request

现在/ me请求响应为403。

2 个答案:

答案 0 :(得分:0)

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return this.user.getRoles().stream().map(role -> new SimpleGrantedAuthority(String.format("ROLE_%s", role.getRole()))).collect(Collectors.toList());
}

我将角色更改为 role.getRole()

答案 1 :(得分:-1)

您可以更改这些行,即管理员限制较高吗?