SpringSecurity的自定义授权

补充一个小问题

@PreAuthorize("hasAuthority('sys:admin:list')")
@RequestMapping("/more")
public String more(){
    return "success";
}

这段权限代码中,必须使用public修饰符,如果使用private则权限设置会失效

1.1 思路分析

LoginUser类

1.在LoginUser类中新增一个List属性一个List属性,包含着权限信息

2.重写getAuthorities()方法(因为权限信息需要从该方法中取得),将List封装到List中对应getAuthorities方法的返回值。

3.对List属性取消JSON序列化,否则反序列化会出错

UserDetailServiceImpl类

1.补充获取权限方法,这里先给出权限,后续会从数据库中查询。返回loginUser对象

JwtAuthoriTokenFilter类

1.在对应权限获取的构造方法中,利用getAuthorities()方法传递权限,封装到SecurityContextHolder中等待被访问。

SecurityConfig

1.开启权限。@EnbaleGlobalMethodSecurity(prePostEnabled=true)

SecurityController类

1.添加注解权限@PreAuthorize("hasAuthority('sys:test')")

1.2 实现

在domain类中新增权限集合属性

SpringSecurity的自定义授权_第1张图片

去权限并封装带LoginUser中

SpringSecurity的自定义授权_第2张图片

将获取LoginUser中权限信息并封装到Authentication对象中,最终封装到 SecurityContextHolder中。因为其他过滤器会从中取得用户信息

 开启权限校验

设置权限字符

SpringSecurity的自定义授权_第3张图片

你可能感兴趣的:(java,开发语言)