使用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 中成功登录后如何限制 POST Rest Api 以供公共访问
列出所有已部署的 REST 端点(spring-boot、jersey)
如何在 Spring-boot 中不模拟服务类的情况下为 REST 控制器端点编写单元测试