spring|Spring Security基于角色授权介绍(八)

spring|Spring Security基于角色授权介绍(八)

文章图片

spring|Spring Security基于角色授权介绍(八)

文章图片

spring|Spring Security基于角色授权介绍(八)

上一篇文章把security框架中的用户认证功能介绍完了 , 这篇文章开始介绍security框架中的另一个功能 , 即:用户授权 。 授权就是指:指定哪些用户能够访问系统的哪些资源(访问哪些功能) 。
一、security中的授权security中可以有如下几种方式进行授权的设置 , 分别是:

  • 基于内存的角色授权
  • 基于角色的授权
  • 基于权限的授权
  • 基于注解的授权
  • 动态授权
基于内存的角色授权不是常用的方式 , 所以不做介绍 , 主要介绍一下基于角色、权限、注解以及动态授权四种方式 。 这篇文章先介绍基于角色的授权 。
二、基于角色的授权在之前用户认证的工程中 , 其实会存在一个问题 , 就是在security配置类中没有设置访问授权 , 那么此时用户不需要认证就可以访问系统的任意资源 。
(1)创建测试类
创建【TestController】测试类 , 里面编写两个方法 , 用于测试授权访问效果 。

启动工程 , 在不登录的情况下 , 可以发现依然能够访问两个测试方法 , 这是因为在security配置类的configure(HttpSecurity http)方法中没有设置授权访问 。
(2)设置请求授权
在configure(HttpSecurity http)方法中 , 除了登录处理请求外 , 其余所有请求设置为需要认证才能够访问 , 如下所示:

再次启动工程 , 然后再次访问test01和test02两个请求 , 可以发现 , 此时没有认证就会跳转到用户登录页面 。
(3)设置url访问所需要的角色
在security配置类中 , 设置url请求所需要的角色 , 主要有两个方法:
  • hasRole():拥有指定角色才能够访问
  • hasAnyRole():拥有任意一个角色就可以访问
举例如下:设置/api/test01请求只能是admin角色才能访问 , /api/test02请求只能是test角色才能访问 。

设置访问ur所需要的l角色权限之后 , security框架就会通过获取当前登录人的角色 , 然后和对应访问url的角色进行比对 , 如果登录人拥有访问url的角色 , 则可以访问 , 否则抛出403异常 。
用户的角色信息一般都是查询数据库获取 , 这里为了演示 , 就不进行查询数据 , 通过直接指定用户角色进行测试 。 在【MyUserService】类中 , 指定用户角色(注意:角色必须使用ROLE_开头 , 因为security框架默认会给用户角色添加ROLE_前缀 , 所以从数据库中查询出来的角色必须是ROLE_开头 , 否则无法匹配成功) 。

启动工程 , 首先登录系统 , 然后访问两个测试url , 可以发现 , 能够正常访问/api/test01 , 但是访问/api/test02时候 , 出现了403错误页面 。

可以将登录用户的角色设置为ROLE_test进行测试 , 再次访问 , 发现只能访问/api/test02 , 无法访问/api/test01 。
以上 , 就是security通过用户角色对访问的url资源进行授权判断 , 当用户拥有的角色和url访问的角色能够匹配上 , 则有权限访问 , 否则抛出403错误页面 。
【spring|Spring Security基于角色授权介绍(八)】这是我的第86篇文章 , 谢谢大家阅读 。