Bootstrap

@PermitAll注解和@PreAuthorize注解

@PermitAll

Spring Security中的@PermitAll注解‌是一个标记注解,用于指示一个特定的类或方法可以被任何用户访问,无论用户是否经过身份验证或拥有任何特定的角色。这个注解通常用于那些不需要进行权限校验的接口或方法上

例如公开的API端点或主页,希望任何人都能访问,可以使用@PermitAl注解


@RestController
public class PublicApiController {
    @PermitAll
    @GetMapping("/public/data")
    public ResponseEntity<String> getPublicData() {
        return ResponseEntity.ok("这是公开数据, 任何人都可以访问。");
    }
}

在Spring Security中,@PermitAll注解可以应用于Controller层的方法上,表示该方法所对应的URL可以被所有用户访问,无需进行权限校验

@RestController
public class UserController {
    @PermitAll
    @GetMapping("/api/public")
    public String publicMethod() {
        return "这是公开的方法";
    }
}

在这个例子中,publicMethod()方法使用了@PermitAll注解,意味着无论用户是否具有相应的权限,都可以访问/api/public路径‌

@PreAuthorize 注解

在开源项目中但凡使用了Spring Security框架的总会在部分接口上看到这个方法

很明显这是个创建用户的接口,我们都能看出这个注解的大致意思,就是判断登录的人是否有添加权限
下面来详细说明一下@ss.hasPermission(‘visit:questionnaire:query’)是什么意思,怎么用的
首先,@PreAuthorize是 Spring Security 内置的前置权限注解,添加在接口方法上,声明需要的权限,实现访问权限的控制。
实现原理:

当 @PreAuthorize 注解里的 Spring EL 表达式返回 false 时,表示没有权限。
而 @PreAuthorize(“@ss.hasPermission(‘visit:questionnaire:query’)”) 表示调用 Bean 名字为 ss 的 hasPermission(…) 方法,方法参数为"visit:questionnaire:query" 字符串。

所以你只需要找到在哪儿创建的Bean,并且Bean的名字是ss,就知道这个方法到底是怎么实现的了

;