2.3 方法授权实现
2.3.1资源服务添加授权控制
1、要想在资源服务使用方法授权,首先在资源服务配置授权控制
1)添加spring-cloud-starter-oauth2依赖。
2)拷贝授权配置类ResourceServerConfig。
3)拷贝公钥。
2.3.2方法上添加注解
通常情况下,程序员编写在资源服务的controller方法时会使用注解指定此方法的权限标识。
1、查询课程列表方法
指定查询课程列表方法需要拥有course_find_list权限。
2.3.2方法上添加注解
通常情况下,程序员编写在资源服务的controller方法时会使用注解指定此方法的权限标识。
1、查询课程列表方法
指定查询课程列表方法需要拥有course_find_list权限。
@PreAuthorize("hasAuthority('course_find_list')")
@Override
public QueryResult<CourseInfo> findCourseList(@PathVariable("page") int page,
@PathVariable("size") int size,
CourseListRequest courseListRequest)
2、课程计划查询方法
课程计划查询方法需要拥有course_teachplan_list权限。
//当用户拥有course_teachplan_list权限时候方可访问此方法
@PreAuthorize("hasAuthority('course_teachplan_list')")
@Override
@GetMapping("/teachplan/list/{courseId}")
public TeachplanNode findTeachplanList(@PathVariable("courseId") String courseId) {
return courseService.findTeachplanList(courseId);
}
3、在资源服务(这里是课程管理)的ResourceServerConfig类上添加注解,激活方法上添加授权注解
//激活方法上的PreAuthorize注解
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
2.4 方法授权测试
重启课程管理服务,测试上边两个方法。
使用postman测试,测试前执行登录,并且将jwt令牌添加到header。
1)Get 请求http://localhost:31200/course/courseview/5a795ac7dd573c04508f3a56
用户没有拥有course_courseview权限,所以无法正常访问
总结,只要用户拥有course_teachplan_list,course_pic_list这两个权限才能访问,但是当前用户没有course_courseview的访问权限,而且我们对courseview方法加了权限,所以无法访问
- Get请求http://localhost:31200/course/teachplan/list/4028e581617f945f01617f9dabc40000
控制器方法名前边加不加那句话都能访问。
由于用户没有查询课程列表方法的权限,所以无法正常访问,其它方法可以正常访问。
总结,只要用户拥有course_teachplan_list,course_pic_list这两个权限才能访问
//使用静态的权限表示用户所拥有的权限
user_permission.add("course_teachplan_list");//查询课程信息
user_permission.add("course_pic_list");//图片查询
2.5 小结
方法授权步骤:
1、ResourceServerConfig类上添加注解,如下:
//激活方法上的PreAuthorize注解
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
2、在方法添加授权注解
@PreAuthorize("hasAuthority('???')")
3、如果方法上不添加授权注解表示此方法不需要权限即可访问。