Spring安全保护服务层,Web服务层或两者兼而有之?

Itt*_*tai 8 java spring-security layer service-layer

我有一个API,我通过REST暴露,我正在考虑在哪里放置权限限制.
我已经读到有一个关于保护服务层的最佳实践,因为它正在进行工作,你不知道它将被调用到哪里但是我不确定什么是关于WS的最佳实践层.
我有一个想法是,我需要在服务层上有一个非常精细的授权模型和WS层上非常粗糙的授权模型,以便最大限度地减少破坏DRY原则,但仍然有一些概念深度防守.

例:

对于Users资源,有一个UserWS和一个UserService.管理员可以创建/更新/删除用户,用户可以阅读其他用户.
假设UserWS受到约束,%root%/users我将intercept-url为该URL 定义一个具有ROLE_USER权限的URL,该权限仅表示您必须是用户才能到达那里,但服务层本身将指定相关方法的特定权限.

其他选择是:

  • 在服务和WS
    -Pro 上放置相同的授权要求 - 您将尽早过滤掉入侵者(如果您使用的是弹簧mvc,则保存参数的转换)
    配置的复制是维护问题并且容易出错=>安全问题


  • 如果来自WS
    Con的服务层可能会从不同的上下文中使用, 则仅将授权要求尽快放在WS -Pro-Filter上

  • 仅在服务上实现授权要求 -
    Pro-No Duplication
    Con-Overhead允许"直率"无效请求到达服务层

非常感谢有关选项的任何反馈

Noa*_*oam 6

Ittai,在WS和服务层使用相同的安全机制被认为是重复自己 - 它需要在这两个级别进行维护.在WS层没有任何安全性是件坏事 - 因为你实际上让任何人进入你的系统(即使你以后会阻止他们 - 很多人认为这是一件坏事).简而言之,我认为你应该混淆这两个 - 在WS层使用非常粗略的机制,在服务层使用非常强大的机制,这就是你不会重复自己而不必在两个地方维护代码的方式(如它不是SAME安全级别); 并且您将能够尽快过滤掉尺寸不足的用户,但仍然应该放置一个非常高的安全级别.