7

我需要使用特定参数限制方法执行。Fe 一些卖家可以为客户 id=1 创建账单,但不能为客户 id=2 创建账单。是否可以在 Spring Security 中实现,或者我应该检查业务逻辑代码?

4

1 回答 1

6

这里有多种选择:

  • 您可以使用Spring Security ACL模块来考虑实际域对象的安全限制。当您有多个这样的安全规则时,这是一个不错的选择。
  • 如果您只有一个这样的安全规则,那么使用 ACL 模块可能是一种矫枉过正。在这种情况下,最好检查您的业务代码。您有两种选择来调用此代码:

    • 使用注释以声明方式调用它。您将能够更轻松地重用此检查,但您会失去对引发异常的控制(它将是默认的 AccessDeniedException):

      @PreAuthorize("hasRole('ROLE_AAA') and @billValidatorBean.validateForCustomer(#customerId)")
      public createBill(Integer customerId, ...) {
      
    • 或者直接在相应的方法中实现它,这样你就可以完全控制一切。

根据情况选择你的方式。

于 2013-09-12T14:12:10.237 回答