学成在线-第18天-讲义-用户授权 二

2.4 方法授权测试 
重启课程管理服务,测试上边两个方法。 
使用postman测试,测试前执行登录,并且将jwt令牌添加到header。 
1Get 请求 http://www.xuecheng.com/api/course/coursebase/get/4028e581617f945f01617f9dabc40000 
用户拥有course_get_baseinfo权限,可以正常访问
学成在线-第18天-讲义-用户授权 二_第1张图片 
2) Get请求 http://www.xuecheng.com/api/course/coursebase/list/1/2 
由于用户没有查询课程列表方法的权限,所以无法正常访问,其它方法可以正常访问。

学成在线-第18天-讲义-用户授权 二_第2张图片 
控制台报错: 
org.springframework.security.access.AccessDeniedException: 不允许访问 
说明:如果方法上没有添加授权注解spring security将不进行授权控制,只要jwt令牌合法则可以正常访问。 
3)异常处理 
上边当没有权限访问时资源服务应该返回下边的错误代码:

UNAUTHORISE(false,10002,"权限不足,无权操作!")

进入资源服务(这里是课程管理),添加异常类AccessDeniedException.class与错误代码 10002 的 对应关系

@ControllerAdvice
public class CustomExceptionCatch extends ExceptionCatch {
static {
//除了CustomException以外的异常类型及对应的错误代码在这里定义,,如果不定义则统一返回固定的错误信息
builder.put(AccessDeniedException.class, CommonCode.UNAUTHORISE);
}
}

再次测试,结果如下:

学成在线-第18天-讲义-用户授权 二_第3张图片 
2.5 小结 
方法授权步骤: 
1ResourceServerConfifig类上添加注解,如下:

//激活方法上的PreAuthorize注解
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)

2、在方法添加授权注解

@PreAuthorize("hasAuthority('???')")

3、如果方法上不添加授权注解表示此方法不需要权限即可访问。 

你可能感兴趣的:(技术文章)