Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 征求意见:实例级安全的架构蓝图_Java_Spring_Security_Architecture - Fatal编程技术网

Java 征求意见:实例级安全的架构蓝图

Java 征求意见:实例级安全的架构蓝图,java,spring,security,architecture,Java,Spring,Security,Architecture,上下文 卖家列出商品清单的商业市场 有一个操作项::setPrice 物品的卖家或客户服务代表可以更改物品的价格 #3的安全检查在项目的数据访问层附近实施,以最大限度地扩大安全检查的覆盖范围 很多人喜欢将安全性作为一个正交的问题来讨论,但我(目前?)不同意这种观点,尤其是在考虑实例级安全性时,因为它与域模型有着不可分割的联系。底线是,我实际上更喜欢在代码中明确说明#3中的安全不变量(通过代码或Spring安全EL注释)。我认为这样的安全不变量是业务逻辑的一部分。我还希望开发者的脸上有安全感。这与

上下文

  • 卖家列出商品清单的商业市场
  • 有一个操作项::setPrice
  • 物品的卖家或客户服务代表可以更改物品的价格
  • #3的安全检查在项目的数据访问层附近实施,以最大限度地扩大安全检查的覆盖范围 很多人喜欢将安全性作为一个正交的问题来讨论,但我(目前?)不同意这种观点,尤其是在考虑实例级安全性时,因为它与域模型有着不可分割的联系。底线是,我实际上更喜欢在代码中明确说明#3中的安全不变量(通过代码或Spring安全EL注释)。我认为这样的安全不变量是业务逻辑的一部分。我还希望开发者的脸上有安全感。这与他们的责任并不正交

    我可能会这样写:

    @PreAuthorize("hasRole('CSR_ITEM_WRITER') or #item.seller.id == principal.id')
    public void setPrice(Item item, Money price) { ... }
    
    我意识到,在发展安全模型时,这会造成一定程度的不灵活性(但考虑到出错的影响,这是一件坏事吗?)

    我们还讨论了CS代表必须“成为”卖方的方法。这有一定的清洁度(这实际上是围绕域而不是用例来关注安全模型)。(注意:当某人代表另一人行事时,应进行充分的审计以检测)


    意见?

    我认为你做得完全正确。当你说安全是一个正交关系时,正交关系是什么?当你说这应该是业务逻辑的一部分时,你是110%正确的

    我会把销售代表和卖家分开。两者都是独特的角色;对于这种特殊情况,它们碰巧有重叠


    考虑到在这种情况下安全性的重要性,我希望您能够编写一系列单元测试,以证明在给定选项所附加的角色的情况下获得适当的结果

    我认为你做得完全正确。当你说安全是一个正交关系时,正交关系是什么?当你说这应该是业务逻辑的一部分时,你是110%正确的

    我会把销售代表和卖家分开。两者都是独特的角色;对于这种特殊情况,它们碰巧有重叠


    考虑到在这种情况下安全性的重要性,我希望您能够编写一系列单元测试,以证明在给定选项所附加的角色的情况下获得适当的结果

    我认为你所做的是个好主意(我目前正在做类似的事情)

    我建议您看看SpringSecurity中的PermissionEvaluator组件(请参阅),因为它比普通注释有一些优势

  • 您的安全机制可以更容易地更改,因为它更全球化
  • 安全评估可以通过审核日志/监控/轻松扩展
  • Evaluator实现可以进行单元测试(注释需要运行的spring上下文才能工作,因此只能在集成测试中进行测试)

  • 到目前为止,我还没有发现这个想法的直接缺点。

    我认为你所做的是一个好主意(我目前正在做类似的事情)

    我建议您看看SpringSecurity中的PermissionEvaluator组件(请参阅),因为它比普通注释有一些优势

  • 您的安全机制可以更容易地更改,因为它更全球化
  • 安全评估可以通过审核日志/监控/轻松扩展
  • Evaluator实现可以进行单元测试(注释需要运行的spring上下文才能工作,因此只能在集成测试中进行测试)
  • 到目前为止,我还没有发现这个想法的直接缺点