使用@PreAuthorize 的最佳实践
Best practice to use @PreAuthorize
我的服务 class 具有安全方法(@PreAuthorize
、Spring 安全)。
它是编码的坏习惯吗?
也许我应该只在我的控制器中使用此注释 @PreAuthorize
class(@Controller
或 @RestController
)
是的,理想情况下,这种类型的授权检查应该在 Controller 或第一个请求处理程序步骤(如您提到的 RestController)中完成。在控制器方法上放置 @PreAuthorize
注释更有意义,因为请求不会转发到服务层,如果找不到正确的角色,则不会执行不必要的代码(控制器方法中的代码)。
但是
如果您的应用程序的服务 classes 被多个控制器使用,那么您可以在服务层上添加 @PreAuthorize
注释。如果明天有人创建了一个新控制器(并忘记使用正确的授权检查)并使用现有服务 class 那么您的应用程序将使用服务层授权正确处理授权。
通常我在服务层使用@PreAuthorize/@PostAuthorize 和<sec:intercept-url
或javaconfig
来检查Controllers/Urls 的角色。
如果您必须检查 data/object 中的某些内容(例如用户是否有权更改某个特定公司的数据),您应该检查服务层。
我的服务 class 具有安全方法(@PreAuthorize
、Spring 安全)。
它是编码的坏习惯吗?
也许我应该只在我的控制器中使用此注释 @PreAuthorize
class(@Controller
或 @RestController
)
是的,理想情况下,这种类型的授权检查应该在 Controller 或第一个请求处理程序步骤(如您提到的 RestController)中完成。在控制器方法上放置 @PreAuthorize
注释更有意义,因为请求不会转发到服务层,如果找不到正确的角色,则不会执行不必要的代码(控制器方法中的代码)。
但是
如果您的应用程序的服务 classes 被多个控制器使用,那么您可以在服务层上添加 @PreAuthorize
注释。如果明天有人创建了一个新控制器(并忘记使用正确的授权检查)并使用现有服务 class 那么您的应用程序将使用服务层授权正确处理授权。
通常我在服务层使用@PreAuthorize/@PostAuthorize 和<sec:intercept-url
或javaconfig
来检查Controllers/Urls 的角色。
如果您必须检查 data/object 中的某些内容(例如用户是否有权更改某个特定公司的数据),您应该检查服务层。