【问题标题】:Subscription design pattern : Spring订阅设计模式:Spring
【发布时间】:2017-02-07 06:48:25
【问题描述】:

我正在使用 spring、spring security、hibernate 和 Oauth 构建基于云的应用程序。

  • 它有不同的产品,每个产品都有多个 模块。模块还具有多种功能。
  • 客户必须单独订阅每个产品才能使用它们
  • 每个客户端可以有多个用户,并且客户端必须为其用户提供对产品的访问权限。

  • 客户在订阅时必须选择包(银、金、..) 每个产品

  • 包将包含每个产品的模块详细信息和用户数,并且客户端用户将是 只能访问客户端所在的模块(选定的包) 已订阅且用户有权访问。

我必须为每个功能创建 Rest Api。

问题:我正在使用 Spring Oauth2 来保护我的 API,因此只有注册的客户端及其用户可以访问它们,但他们可以访问所有 API。我应该只允许客户端访问它的那些 API有权访问/订阅。我如何在 Spring 中实现这一目标?

目前我正计划使用拦截器,但它高度依赖于 URL 模式。因此,对于每个产品和模块,我将拥有不同的拦截器

网址格式:http://abc/rest/PRODUCT/MODULE/..

有没有更好的方法来实现它?

【问题讨论】:

    标签: spring spring-mvc design-patterns subscriptions struts2-interceptors


    【解决方案1】:

    您可以选择另一种方式,这可能会更好,因为您不必编写自定义 URL 拦截器。

    您可以将 Spring Security 与 @Secured({"ROLE"})@PreAuthorize 注释一起使用,您可以为每个产品创建角色,并为客户提供他们订阅的角色。您可以找到有关此注释及其工作原理的更多信息here

    要使 @Secured@PreAuthorize 工作,您需要在 Spring Boot 上下文类上具有注解 @EnableGlobalMethodSecurity

    希望对你有帮助。

    【讨论】:

    • 感谢您的回复。请检查我已编辑问题。如果产品是不同服务器(资源服务器)中的不同应用程序怎么办。 @Secured 将如何提供帮助?我在客户中有多个用户。我也应该分配对它们的访问权限吗?
    • 您使用的是微服务架构吗?这取决于您的架构,但最终,每个登录用户都应该获得相应的角色(他们被分配到的客户端)。
    • 是的,它是微服务架构。抱歉,我对 Spring 和 Spring Security 比较陌生。我了解我们可以按照您建议的方式实施。但我想限制产品级别和模块级别的访问。我是否也必须为每个模块创建角色?并且用户可以访问多个模块。所以每次客户订阅新产品时,我都会为用户添加角色,对吗?用户也使用 Ouath 令牌进行身份验证。如何从 Oauth 令牌获取用户访问权限?
    • 如果您使用的是微服务架构,我猜您是授权服务器或类似的东西,您可以在其中进行 HTTP 调用以验证您的 OAuth 令牌。这应该返回用户信息和授权。您拥有的每项服务都应该在授权部分使用自己,但您的角色在服务之间共享(即用户可以拥有来自多个服务的角色)。是的,每次授权(您授予他对新模块/产品的访问权限)更改时,您都必须为每个用户添加角色。
    • 感谢您的帮助。基于角色的授权似乎比创建拦截器更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多