【发布时间】:2018-05-31 20:39:34
【问题描述】:
我有一个 Spring Boot 应用程序,它公开了受 Spring Security 保护的 REST 端点。
我需要根据服务调用限制对某些路径的访问。假设我有这样的服务:
@Service
public class AccessService {
boolean hasAccess(String requestedPath) {
// some business logic here
}
}
该服务将检查用户角色、一些业务状况并返回true 或false。
现在我需要将此服务调用集成到我的安全配置中。
到目前为止,我有这样的配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
...
.and().authorizeRequests()
.anyRequest().hasRole("USER");
}
我看不到在此处添加服务调用的方法(因为它是完全静态的)。
我正在尝试什么:
目前我正在考虑覆盖我的AuthenticationProvider 并使用附加功能对其进行扩展。
另一种选择是从一个可以进行某种授权的类中扩展我的 REST 控制器,但我不确定这是否可能。
问题:如何根据服务方法调用保护 REST 端点?这样做的正确方法是什么?
【问题讨论】:
-
我建议阅读the reference guide。类似
anyRequest().access("@accessService.hasAccess(request.requestURI) && hasRole('USER')");
标签: java spring spring-security spring-security-oauth2 spring-rest