应该在控制器层或服务层应用spring安全方法级别注释吗?

Jay*_*Jay 27 spring-security

我一直在我的控制器方法上使用带有@PreAuthorize的spring security.我的理由是我希望授权检查在一个层中可预测地发生,并且在请求中尽可能早.但是,我刚刚阅读了spring security 3文档,并看到他们建议在服务层上应用方法级安全性(但他们没有说明原因).

我的问题是:应该在控制器层或服务层应用spring安全方法级别注释吗?(或"两者",或"它取决于"?)更重要的是:为什么?

Sha*_*eep 16

"这取决于" :).如果您的应用程序具有应用所有业务逻辑的服务层,那么这通常是应用安全约束的一个干净的地方,并确保您没有错过任何极端情况.

Web代码通常比较脏,有更多,它变化更快,最终可能会从多个地方调用相同的服务方法.有人可能会添加一个新控制器而忘记正确保护它.或者,您可能有不同类型的客户端调用相同的服务.

但这取决于您的应用程序的结构以及您的用例.您可能对为什么要保护控制器有一个很好的论据.


ram*_*lla 10

考虑代码重用.你打算在其他地方使用你的服务吗?不只是为您的网络层提供信息?我们还通过jms桥重用我们的服务,因此我们保护了服务层.


Dhe*_*rik 6

我认为该服务是使用它的更好地方。

尽管可能会在Controller上产生一些问题,并且 Spring Security FAQ建议将这种注释放在Service 上,但我知道某些操作的授权更多的是业务规则,而不是 Web 层的责任。@PreAuthorize


归档时间:

查看次数:

4631 次

最近记录:

6 年,4 月 前