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

Posted

技术标签:

【中文标题】使用spring-boot对rest服务进行访问控制【英文标题】:Access control to rest services with spring-boot 【发布时间】:2017-02-16 01:32:44 【问题描述】:

我玩了一下弹簧启动安全性。我使用 mongodb、spring-boot-starter-data-rest、spring-boot-starter-security 和 spring-boot-starter-web。我使用了像 REST 服务这样的自动 expos 存储库的可能性。我有两个存储库用户和客户。用户存储库用于帐户。 像这样扩展 WebSecurityConfigurerAdapter 后:

@Override
protected void configure(HttpSecurity http) throws Exception 
    super.configure(http);
    http.authorizeRequests()
    .antMatchers("/users/**")
    .hasRole("ADMIN").antMatchers("/", "/customers")
    .hasRole("USER")
    .anyRequest().authenticated()
    .and()
    .formLogin().permitAll();

A 无法控制具有 ADMIN 角色的用户对 /users/ 页面的访问。我在访问服务时获得了身份验证,但是每个具有每个角色的用户都可以在任何地方访问。还应该配置什么?

【问题讨论】:

【参考方案1】:

这听起来你需要看看Method Security Expressions Spring Security 的特性。尤其是注解@PreAuthorize/@PostAuthorize

【讨论】:

是的,从哪个类的方法?我只有实体类 users.java 和 customer.java。我使用自动生成的 REST? 因此您需要使用 Spring Data JPA 存储库显式实现控制器 + 服务层。之后@PreAuthorize/@PostAuthorize 的最佳位置是服务层方法。 我不能使用 MongoDB 自动曝光实体(带有生成的 REST),我希望实现访问控制?

以上是关于使用spring-boot对rest服务进行访问控制的主要内容,如果未能解决你的问题,请参考以下文章

没有 Spring-boot 的 Eureka 服务发现

在 Spring-boot 中成功登录后如何限制 POST Rest Api 以供公共访问

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

如何在 Spring-boot 中不模拟服务类的情况下为 REST 控制器端点编写单元测试

Spring-Boot REST 服务基本 http 身份验证排除一个端点

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