【郑州校区】学成在线-第18天-讲义-用户授权 二
2.4 方法授权测试
重启课程管理服务,测试上边两个方法。
使用postman测试,测试前执行登录,并且将jwt令牌添加到header。
1)Get 请求 http://www.xuecheng.com/api/course/coursebase/get/4028e581617f945f01617f9dabc40000
用户拥有course_get_baseinfo权限,可以正常访问
2) Get请求 http://www.xuecheng.com/api/course/coursebase/list/1/2
由于用户没有查询课程列表方法的权限,所以无法正常访问,其它方法可以正常访问。
控制台报错:
org.springframework.security.access.AccessDeniedException: 不允许访问
说明:如果方法上没有添加授权注解spring security将不进行授权控制,只要jwt令牌合法则可以正常访问。
3)异常处理
上边当没有权限访问时资源服务应该返回下边的错误代码:
[AppleScript] 纯文本查看 复制代码 UNAUTHORISE(false,10002,"权限不足,无权操作!")
进入资源服务(这里是课程管理),添加异常类AccessDeniedException.class与错误代码 10002 的 对应关系
[AppleScript] 纯文本查看 复制代码 @ControllerAdvice
public class CustomExceptionCatch extends ExceptionCatch {
static {
//除了CustomException以外的异常类型及对应的错误代码在这里定义,,如果不定义则统一返回固定的错误信息
builder.put(AccessDeniedException.class, CommonCode.UNAUTHORISE);
}
}
再次测试,结果如下:
2.5 小结
方法授权步骤:
1、ResourceServerConfifig类上添加注解,如下:
[AppleScript] 纯文本查看 复制代码 //激活方法上的PreAuthorize注解
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
2、在方法添加授权注解
[AppleScript] 纯文本查看 复制代码 @PreAuthorize("hasAuthority('???')")
3、如果方法上不添加授权注解表示此方法不需要权限即可访问。
|