使用@PreAuthorize 的最佳实践

Best practice to use @PreAuthorize

我的服务 class 具有安全方法(@PreAuthorize、Spring 安全)。

它是编码的坏习惯吗?

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

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

但是

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

通常我在服务层使用@PreAuthorize/@PostAuthorize 和<sec:intercept-urljavaconfig 来检查Controllers/Urls 的角色。

如果您必须检查 data/object 中的某些内容(例如用户是否有权更改某个特定公司的数据),您应该检查服务层。