gpt4 book ai didi

java - Spring Security中PreAuthorize注解中使用permitAll()的目的

转载 作者:行者123 更新时间:2023-12-02 03:44:25 29 4
gpt4 key购买 nike

作为 Spring Security 框架的新手,我想知道为什么我们将 @PreAuthorize("permitAll()") 与方法一起使用?文档说,permitAll 始终评估为 true。 (http://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html)

此外,我还更改了以下代码。开发者从permitAll()改为特定权限检查。这意味着什么?由于我不太确定permitAll()是如何工作的,所以我无法判断代码更改背后的逻辑。在我看来,开发人员添加了特定的权限检查,并传递 null 作为身份验证对象。有人可以解释一下显式传递 null 作为身份验证对象有什么影响吗?如果未经身份验证的用户对目标对象 - 'opetussuunnitelma' 具有特定的 - 'LUONTI' 权限,他们是否也可以访问?

-    @PreAuthorize("permitAll()")
+ @PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI')")
OpetussuunnitelmaDto addOpetussuunnitelma(OpetussuunnitelmaDto opetussuunnitelmaDto);

谢谢。非常感谢任何帮助!

最佳答案

我觉得没有人真正给你真正想要的东西,这是“permitAll()”的一个用例。

当您使用特定权限限制整个类或应用程序时,可以使用它,例如:@PreAuthorize("hasAuthority('USER')")

在这里,只有被标识为您定义的用户的客户端才能访问您的类的方法。

但是在 Controller 中的某个时刻,您希望某个方法是无权限的,因此您需要将 @PreAuthorize("permitAll()") 添加到您的方法中,以便它覆盖全局权限.

人们会这样做,因为首先使用最高权限锁保护所有内容,然后在网络上戳洞(例如,应用程序/类被锁定到 ADMIN,但大多数方法然后被授权给 USER)比其他方式更安全大约。因为如果默认情况下所有内容都已解锁,那么当您忘记锁定 Controller 时,您可能会遇到安全问题。

关于java - Spring Security中PreAuthorize注解中使用permitAll()的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31059528/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com