我正在使用spring,spring security,hibernate和Oauth构建基于云的应用程序。
每个客户都可以有多个用户,客户必须提供用户访问产品的权限。
客户必须在订阅时选择套餐(银色,金色,..) 对于每种产品
套餐将为每个产品和客户端用户提供模块详细信息和用户数 只能访问哪个客户端的模块(选定的包) 订阅并且用户可以访问。
我必须为每个功能创建Rest Api。
问题:我使用Spring Oauth2来保护我的API,所以只有注册的客户端和他们的用户可以访问它们,但是他们可以访问所有的API。我应该允许客户端只访问那些API有权访问/订阅。我怎样才能在Spring中实现这一目标?
目前我打算使用感知器,但它在很大程度上取决于URL模式。因此,对于每个产品和模块,我将使用不同的拦截器
网址格式:http://abc/rest/ PRODUCT / MODULE / ..
有没有更好的方法来实现它?
答案 0 :(得分:5)
您可以选择其他方式,这可能会更好,因为您不必编写自定义URL拦截器。
您可以将Spring Security与其@Secured({"ROLE"})
或@PreAuthorize
注释一起使用,您可以为每个产品创建角色,并为客户提供他们订阅的角色。您可以找到有关此注释及其工作原理的更多信息here。
要使@Secured
和@PreAuthorize
起作用,您需要在Spring Boot上下文类中使用注释@EnableGlobalMethodSecurity
。
希望它有所帮助。