使用@PreAuthorize的最佳做法

时间:2016-01-05 15:12:07

标签: java spring-security architecture spring-boot

我有一个带有安全方法的服务类(@PreAuthorize,Spring Security)。

编码不好吗?

也许我应该只在我的控制器类(@PreAuthorize@Controller)中使用此注释@RestController

2 个答案:

答案 0 :(得分:5)

是的,理想情况下,这种类型的授权检查应该在Controller或第一个请求处理程序步骤(如您提到的RestController)中完成。将@PreAuthorize注释放在Controller方法上更有意义,因为请求不会转发到服务层,如果找不到正确的角色,则不会执行不必​​要的代码(控制器方法中存在的代码)。

BUT

如果您有多个控制器正在使用服务类的应用程序,那么您可以在服务层上使用@PreAuthorize注释。如果明天有人创建新控制器(并忘记使用正确的授权检查)并使用现有服务类,那么您的应用程序将使用服务层授权正确处理授权。

答案 1 :(得分:0)

通常我在服务层使用@ PreAuthorize / @ PostAuthorize,<sec:intercept-urljavaconfig检查控制器/网址的角色。

如果您必须检查数据/对象内部的某些内容(例如,如果用户有权更改来自某个特定公司的数据),您应该检查服务层。