例如:
@PreAuthorize("hasRole('admin') && hasPermission('save', #user)")
void updateUser(User user) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
以及一些没有 PreAuthorize 的示例实现。
void updateUser(User user) {
Security.hasRole(Roles.ADMIN);
Security.hasPermission(Permission.SAVE, user);
// some code
}
Run Code Online (Sandbox Code Playgroud)
第二个例子更容易理解。可以通过IDE重构(重命名角色,或查找所有角色用法)。编译时检查代码。工作更快。并可能有其他优点。
为什么 spring-security 开发人员选择注解和 SpEL?有人可以解释一下吗?
我能找到的只有一个原因 - 更容易访问 ApplicationContext。但据我所知,Spring Security 无论如何都可以通过 SecurityContextHolder 单例工作。