Skip to content

基于方法的授权

1. 开启方法授权

在WebSecurityConfig中添加如下注解:

java
@EnableMethodSecurity

2. 给用户授予角色和权限

DatabaseUserDetailsManager中的loadUserByUsername()方法:

java
return User
.withUsername(user.getUsername())
.password(user.getPassword())
.roles("ADMIN")
.authorities("USER_ADD", "USER_UPDATE")
.build();

3. 常用授权注解

java
//用户必须有 ADMIN 角色 并且 用户名是 admin 才能访问此方法
@PreAuthorize("hasRole('ADMIN') and authentication.name == 'admim'")
@GetMapping("/list")
public List<User> getList(){
    return userService.list();
}

//用户必须有 USER_ADD 权限 才能访问此方法
@PreAuthorize("hasAuthority('USER_ADD')")
@PostMapping("/add")
public void add(@RequestBody User user){
    userService.saveUserDetails(user);
}