Spring安全检查方法参数

时间:2013-09-12 12:59:22

标签: spring spring-security acl

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

1 个答案:

答案 0 :(得分:6)

这里有多种选择:

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

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

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

根据情况选择你的方式。