本文共 2623 字,大约阅读时间需要 8 分钟。
方法授权要完成的是资源服务根据jwt令牌完成对方法的授权,具体流程如下:
1、生成Jwt令牌时在令牌中写入用户所拥有的权限 我们给每个权限起个名字,例如某个用户拥有如下权限: course_find_list:课程查询 course_pic_list:课程图片查询 2、在资源服务方法上添加注解PreAuthorize,并指定此方法所需要的权限 例如下边是课程管理接口方法的授权配置,它就表示要执行这个方法需要拥有course_find_list权限。@PreAuthorize("hasAuthority('course_find_list')")@Overridepublic QueryResultfindCourseList(@PathVariable("page") int page,@PathVariable("size") int size,CourseListRequest courseListRequest)
3、当请求有权限的方法时正常访问
4、当请求没有权限的方法时则拒绝访问修改认证服务的UserDetailServiceImpl类,下边的代码中 permissionList列表中存放了用户的权限,
并且将权限标识按照中间使用逗号分隔的语法组成一个字符串,最终提供给Spring security。//指定用户的权限,这里暂时硬编码ListpermissionList = new ArrayList<>();permissionList.add("course_get_baseinfo");permissionList.add("course_find_pic");//将权限串中间以逗号分隔String permissionString = StringUtils.join(permissionList.toArray(), ",");//String user_permission_string = "";UserJwt userDetails = new UserJwt(username,password,AuthorityUtils.commaSeparatedStringToAuthorityList(permissionString));
重启认证服务工程,使用postman完成登录,从redis中找到jwt令牌。
使用jwt的测试程序查看 此令牌的内容。1、要想在资源服务使用方法授权,首先在资源服务配置授权控制
1)添加spring-cloud-starter-oauth2依赖。 2)拷贝授权配置类ResourceServerConfig。 3)拷贝公钥。通常情况下,程序员编写在资源服务的controller方法时会使用注解指定此方法的权限标识。
1、查询课程列表方法 指定查询课程列表方法需要拥有course_find_list权限。@PreAuthorize("hasAuthority('course_find_list')")@Overridepublic QueryResultfindCourseList(@PathVariable("page") int page,@PathVariable("size") int size,CourseListRequest courseListRequest)
2、查看课程基本信息方法
指定查询课程基本信息方法需要拥有course_get_baseinfo权限。@PreAuthorize("hasAuthority('course_get_baseinfo')")@Overridepublic CourseBase getCourseBaseById(@PathVariable("courseId") String courseId)
3、在资源服务(这里是课程管理)的ResourceServerConfig类上添加注解,激活方法上添加授权注解
//激活方法上的PreAuthorize注解@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
截至目前在测试授权时使用的权限数据是静态数据,正常情况的流程是:
1、管理员给用户分配权限,权限数据写到数据库中。 2、认证服务在进行用户认证时从数据库读取用户的权限数据(动态数据) 本节实现动态权限数据。打开xc_user数据库,找到下边的表:
转载地址:http://ovhwz.baihongyu.com/