Spring-boot REST 安全配置角色无法正常工作

Posted

技术标签:

【中文标题】Spring-boot REST 安全配置角色无法正常工作【英文标题】:Spring-boot REST security config roles don't work right 【发布时间】:2019-05-31 10:55:50 【问题描述】:

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

@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。

【问题讨论】:

【参考方案1】:
@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 更改为 role.getRole()

【讨论】:

【参考方案2】:

你能换行吗,管理员限制是上限?

【讨论】:

我也有同样的问题。

以上是关于Spring-boot REST 安全配置角色无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring-Boot-REST 调用中获取用户信息?

无法实现对 Spring-Boot API 的基于角色的访问

使用spring-boot对rest服务进行访问控制

spring-boot 弹簧安全 angularjs

列出所有已部署的 REST 端点(spring-boot、jersey)

使用docker-compose时无法访问docker容器内的spring-boot rest-endpoint