SpringSecurity的自定义授权
补充一个小问题
@PreAuthorize("hasAuthority('sys:admin:list')") @RequestMapping("/more") public String more(){ return "success"; }
这段权限代码中,必须使用public修饰符,如果使用private则权限设置会失效
1.1 思路分析
LoginUser类
1.在LoginUser类中新增一个List<String>属性一个List<GrantedAuthority>属性,包含着权限信息
2.重写getAuthorities()方法(因为权限信息需要从该方法中取得),将List<String>封装到List<GrantedAuthority>中对应getAuthorities方法的返回值。
3.对List<GrantedAuthority>属性取消JSON序列化,否则反序列化会出错
UserDetailServiceImpl类
1.补充获取权限方法,这里先给出权限,后续会从数据库中查询。返回loginUser对象
JwtAuthoriTokenFilter类
1.在对应权限获取的构造方法中,利用getAuthorities()方法传递权限,封装到SecurityContextHolder中等待被访问。
SecurityConfig
1.开启权限。@EnbaleGlobalMethodSecurity(prePostEnabled=true)
SecurityController类
1.添加注解权限@PreAuthorize("hasAuthority('sys:test')")
1.2 实现
在domain类中新增权限集合属性
去权限并封装带LoginUser中
将获取LoginUser中权限信息并封装到Authentication对象中,最终封装到 SecurityContextHolder中。因为其他过滤器会从中取得用户信息
开启权限校验
设置权限字符