基于springboot注解的shiro 授权及角色认证
授权
用户登录后,需要验证是否具有指定角色指定权限。Shiro也提供了方便的工具进行判 断。 这个工具就是Realm的doGetAuthorizationInfo方法进行判断。
触发权限判断的有两种 方式
(1) 在页面中通过shiro:****属性判断
(2) 在接口服务中通过注解@Requires****进行判断
后端接口服务注解
通过给接口服务方法添加注解可以实现权限校验,可以加在控制器方法上,也可以加 在业务方法上,一般加在控制器方法上。常用注解如下:
(1)@RequiresAuthentication
验证用户是否登录,等同于方法subject.isAuthenticated()
(2)@RequiresUser
验证用户是否被记忆: 登录认证成功subject.isAuthenticated()为true 登录后被记忆subject.isRemembered()为true
(3)@RequiresGuest
验证是否是一个guest的请求,是否是游客的请求 此时subject.getPrincipal()为null
(4)@RequiresRoles
验证subject是否有相应角色,有角色访问方法,没有则会抛出异常 AuthorizationException。 例如:
@RequiresRoles(“aRoleName”)
void someMethod();
只有subject有aRoleName角色才能访问方法someMethod()
(5)@RequiresPermissions
验证subject是否有相应权限,有权限访问方法,没有则会抛出异常 AuthorizationException。 例如:
@RequiresPermissions (“file:read”,”wite:aFile.txt”)
void someMethod();
subject必须同时含有file:read和wite:aFile.txt权限才能访问方法someMethod()
授权验证-没有角色无法访问
(1)添加 controller 方法,并添加验证角色注解
(2)修改 main.html
(3)修改 MyRealm 方法
(4)运行测试
授权验证-获取角色进行验证
(1)修改 MyRealm 方法
(2)运行测试
(3)确认库表
(4)查询 sql 根据用户名查询对应角色信息
SELECT NAME FROM role WHERE id IN (SELECT rid FROM role_user WHERE uid=(SELECT id FROM USER WHERE NAME='张三'));
(5)mapper 方法
(6)service 实现
(7)MyRealm 方法改造
(8)启动登录测试
授权验证-获取权限进行验证
获取权限验证和获取角色相类似
(1)确认库表
(2)查询 sql 根据角色名查询对应权限信息
SELECT info FROM permissions WHERE id IN (SELECT pid FROM role_ps WHERE rid IN (SELECT id FROM role WHERE NAME IN('admin','userMag')));
(3)mapper 方法
(4)service 实现
(5)MyRealm 方法改造
(6)添加 controller 方法
(7)改造 main.html
(8)启动登录测试
授权验证-异常处理
(1)创建认证异常处理类,使用@ControllerAdvice 加@ExceptionHandler 实现特殊异 常处理。
- 点赞
- 收藏
- 关注作者
评论(0)