@PreAuthorize 或 @PostAuthorize 注解实现权限验证 示例
时间: 2023-08-11 14:40:14 浏览: 94
好的,下面是一个简单的示例:
```java
@RestController
public class UserController {
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/user/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 查询用户信息
return userService.getUserById(id);
}
@PostAuthorize("returnObject.username == authentication.principal.username")
@GetMapping("/user/current")
public User getCurrentUser() {
// 获取当前登录用户信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = authentication.getName();
return userService.getUserByUsername(username);
}
}
```
在上面的示例中,我们使用 @PreAuthorize 注解来标注 getUserById 方法,表示只有拥有 ADMIN 角色的用户才能访问该接口。而在 getCurrentUser 方法中,我们使用 @PostAuthorize 注解来标注方法,表示在方法返回结果后会对返回的对象进行验证,只有该用户信息的 username 与当前登录用户的 username 相同时才会返回结果,否则抛出 AccessDeniedException 异常。
需要注意的是,上述示例中使用了 Spring Security 框架进行权限验证,因此您需要先了解 Spring Security 的相关知识才能理解代码的含义。
阅读全文