【问题标题】:Annotation based securing endpoint [closed]基于注释的安全端点[关闭]
【发布时间】:2022-01-29 10:58:44
【问题描述】:
我正在尝试保护 api 控制器功能本身的安全性,以便如果特定用户具有特定角色并允许该人调用该端点,否则响应为 403。
@PostMapping("/user")
**@havingRole("ADMIN","LEADER")** <- my custom annotation.
public ResponseEntity<User> createUser(User user){
....
}
【问题讨论】:
标签:
spring-boot
spring-security
【解决方案1】:
您可以根据提供的 Spring 功能创建自己的注解。按照你的例子:
@Inherited
@Retention(RUNTIME)
@Target({METHOD, TYPE})
@PreAuthorize("hasAnyRole('ADMIN', 'LEADER')")
public @interface AdminOrLeaderRoleRequired {
}
现在您可以在个别方法上使用它:
@PostMapping("/user")
@AdminOrLeaderRoleRequired
public ResponseEntity<User> createUser(User user) {
...
}
或者在类定义中:
@RestController
@RequestMapping("/user")
@AdminOrLeaderRoleRequired
public class UserController {
...
}
内部方法可以用其特定的授权规则覆盖它。
【解决方案2】:
使用注解@PreAuthorize("hasRole('Role_Admin')")