这是原本在Controller层配置的角色权限注解,可以看到角色控制符(0,1,2)都是固定写死的,可读性较差,若数据库中的role字段内容更新不易于维护代码。
@GetMapping("/{uid}")
@PreAuthorize("hasAnyAuthority('0', '1', '2')")
public R searchPersonalInfo(@PathVariable int uid) {
return userService.findUserInfoByUid(uid);
}
所以可以通过@environment.getProperty()注解方法来引用.yml配置文件中的自定义变量,实现动态更新。
以下是application.yml的角色信息配置
role:
other: 0
manager: 1
root: 2
原方法修改为以下内容
@GetMapping("/{uid}")
@PreAuthorize("hasAnyAuthority(@environment.getProperty('role.other'), @environment.getProperty('role.manager'), @environment.getProperty('role.root'))")
public R searchPersonalInfo(@PathVariable int uid) {
return userService.findUserInfoByUid(uid);
}
注意:不能直接使用${}表达式直接引用yml变量,因为@PreAuthorize注解会将整个表达式(包括${})都看成是一个字符串,而不会去搜索yml配置文件中的具体变量值。