一、Shiro授权

  前提:需要认证通过才会有授权一说

1、授权过程

2、相关方法说明

①subject.hasRole("role1"):判断是否有该角色

②subject.hasRoles(List):分别判断该角色是否具有该List的每个内容

③subject.hasAllRoles(Collection):返回boolean,要求参数中所有角色都需要具有

④subject.isPermitted(""):判断是否有该权限

二、shiro.ini实现授权

1、新建module,添加如下pom依赖

  1. <properties>
  2. <shiro.version>1.4.1</shiro.version>
  3. <loggingg.version>1.2</loggingg.version>
  4. </properties>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.apache.shiro</groupId>
  8. <artifactId>shiro-core</artifactId>
  9. <version>${shiro.version}</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>commons-logging</groupId>
  13. <artifactId>commons-logging</artifactId>
  14. <version>${loggingg.version}</version>
  15. </dependency>
  16. </dependencies>

2、shiro.ini添加配置

3、test类

  1. public class TestAuthorization
  2. {
  3. public static void main(String[] args)
  4. {
  5. //1.模拟前台传递的用户名和密码
  6. String username = "zhangsan";
  7. String password = "123456";
  8. //2.创建安全管理器的工厂
  9. Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
  10. //3.通过安全管理器工厂获取安全管理器
  11. SecurityManager securityManager = factory.getInstance();
  12. //4.将安全管理器绑定到当前运行环境
  13. SecurityUtils.setSecurityManager(securityManager);
  14. //5.从当前环境中获取Subject主体
  15. Subject subject1 = SecurityUtils.getSubject();
  16. //6.调用主体的登录方法
  17. try {
  18. subject1.login(new UsernamePasswordToken(username,password));
  19. System.out.println("登录成功!");
  20. } catch (IncorrectCredentialsException e) {
  21. System.out.println("密码不正确");
  22. }catch (UnknownAccountException e) {
  23. System.out.println("用户名不存在");
  24. }
  25. //角色判断
  26. boolean role2 = subject1.hasRole("role2");
  27. System.out.println("是否有role2的角色:"+role2);
  28. //分别判断集合中元素,返回boolean数组
  29. boolean[] booleans = subject1.hasRoles(Arrays.asList("role1", "role2", "role3"));
  30. for (boolean aBoolean : booleans)
  31. {
  32. System.out.println(aBoolean);
  33. }
  34. //判断当前用户是否有集合中所有角色
  35. boolean b = subject1.hasAllRoles(Arrays.asList("role1", "role2", "role3"));
  36. System.out.println(b);
  37.  
  38. //判断权限
  39. boolean permitted = subject1.isPermitted("user:query");
  40. System.out.println("判断当前用户是否有user:query的权限:"+permitted);
  41.  
  42. boolean[] permitted1 = subject1.isPermitted("user:query", "user:add", "user:delete");
  43. for (boolean b1 : permitted1) {
  44. System.out.println(b1);
  45. }
  46. boolean permittedAll = subject1.isPermittedAll("user:query", "user:add", "user:delete");
  47. System.out.println(permittedAll);
  48. }
  49. }

  这样就实现shiro.ini授权,接下来通过shiro.ini实现自定义realm:Shiro入门学习之自定义Realm(四)

Shiro入门学习之shi.ini实现授权(三)的更多相关文章

  1. Shiro入门学习之shi.ini实现认证及源码分析(二)

    一.Shiro.ini文件 1.文件说明 ①ini(InitializationFile)初始文件:Window系统文件扩展名 ②Shiro使用时可以连接数据库,也可以不连接数据库(可以使用shiro ...

  2. Shiro入门学习之自定义Realm实现授权(五)

    一.自定义Realm授权 前提:认证通过,查看Realm接口的继承关系结构图如下,要想通过自定义的Realm实现授权,只需继承AuthorizingRealm并重写方法即可 二.实现过程 1.新建mo ...

  3. Shiro入门学习与实战(一)

    一.概述 1.Shiro是什么? Apache Shiro是java 的一个安全框架,主要提供:认证.授权.加密.会话管理.与Web集成.缓存等功能,其不依赖于Spring即可使用: Spring S ...

  4. shiro入门学习--使用MD5和salt进行加密|练气后期

    写在前面 在上一篇文章<Shiro入门学习---使用自定义Realm完成认证|练气中期>当中,我们学会了使用自定义Realm实现shiro数据源的切换,我们可以切换成从关系数据库如MySQ ...

  5. shiro入门实例,基于ini配置

    基于ini或者关系数据库的,其实都是一样的,重要的是思想. # ==================================================================== ...

  6. shiro入门学习--授权(Authorization)|筑基初期

    写在前面 经过前面的学习,我们了解了shiro中的认证流程,并且学会了如何通过自定义Realm实现应用程序的用户认证.在这篇文章当中,我们将学习shiro中的授权流程. 授权概述 这里的授权指的是授予 ...

  7. Shiro入门学习之散列算法与凭证配置(六)

    一.散列算法概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5.SHA等,一般进行散列时最好提供一个salt(“盐”),什么意思?举个栗子 ...

  8. Shiro入门学习之自定义Realm实现认证(四)

    一.概述 Shirom默认使用自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,而大部分情况下需要从系统数据库中读取用户信息,所以需要实现自定义Realm,Realm接口如下: ...

  9. Shiro入门学习---使用自定义Realm完成认证|练气中期

    写在前面 在上一篇文章<shiro认证流程源码分析--练气初期>当中,我们简单分析了一下shiro的认证流程.不难发现,如果我们需要使用其他数据源的信息完成认证操作,我们需要自定义Real ...

随机推荐

  1. SpringCloud Netflix Feign

    调用其它机器上的服务(远程调用)有2种技术:REST.RPC. REST 注入RestTempalte,服务提供者的url要写成RESTful风格,在url中传递参数. 如果参数很多,url会有一长串 ...

  2. Scale9Sprite不要在初始化的时候setCapInsets

    let scale9Sprite = new ccui.Scale9Sprite(filePath);scale9Sprite.setCapInsets(cc.rect(x,y,w,h)); 而非 l ...

  3. 关于我 & 关于这个博客

    关于我 OIer,初一在读,蒟蒻,普及组选手,只拿过两次PJ2=,实乃菜也 喜欢数学,OI,OI 上主要研究高级数据结构(如平衡树)和一些不那么暴力的算法(如分块) 打不动 CF . 关于这个博客 是 ...

  4. 【做题笔记】UVA11988破损的键盘

    本题可以在洛谷评测,但需要绑定账号 首先解释一下:Home键的作用是把光标移动,End键的作用是返回上次按Home键的地方 考虑朴素做法:输入为[时下一次插入在数组最前端,然后元素整体向后:同时令 l ...

  5. C语言字符串操作函数总结

    转载来源:https://blog.csdn.net/qq_33757398/article/details/81212618 字符串相关操作头文件:string.h 1.strcpy函数 原型:st ...

  6. 2020最新版idea激活教程

    windows破解教程 首先下载jar包:(云盘链接发不上去,大家关注gzh"灰太狼学爪哇"回复idea获取)将其放到合适的文件夹(首选IDEA的同级目录)进行管理: 进入C盘 - ...

  7. 【网易官方】极客战记(codecombat)攻略-地牢-循环又循环

    关卡连接: https://codecombat.163.com/play/level/loop-da-loop 循环真是救命恩人! 简介: 你只需要 一个 while true循环 加上 4 条语句 ...

  8. form中把图片设为按钮

    提交按钮sumbit <input type="image" src="图片路径">//type="image"默认是sumbi ...

  9. linux centos7分区

    哈喽! 我今天来分享一下Linux的分区,本次我使用的是LinuxCentos7版本为例,使用虚拟机,命令是fdisk Linux分区有4个主分区及扩展分区,逻辑分区. 首先给虚拟机添加8G硬盘(硬盘 ...

  10. 解决tomcat控制台乱码问题

    问题原因:编码不一致,tomcat启动后默认编码UTF-8,而windows的默认编码是GBK.所以只需配置启动tomcat后为GBK编码即可. 做法:找到路径 $xxx$\apache-tomcat ...