Shiro入门学习之shi.ini实现授权(三)
一、Shiro授权
前提:需要认证通过才会有授权一说
1、授权过程

2、相关方法说明
①subject.hasRole("role1"):判断是否有该角色
②subject.hasRoles(List):分别判断该角色是否具有该List的每个内容
③subject.hasAllRoles(Collection):返回boolean,要求参数中所有角色都需要具有
④subject.isPermitted(""):判断是否有该权限
二、shiro.ini实现授权
1、新建module,添加如下pom依赖
<properties>
<shiro.version>1.4.1</shiro.version>
<loggingg.version>1.2</loggingg.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${loggingg.version}</version>
</dependency>
</dependencies>
2、shiro.ini添加配置

3、test类
public class TestAuthorization
{
public static void main(String[] args)
{
//1.模拟前台传递的用户名和密码
String username = "zhangsan";
String password = "123456";
//2.创建安全管理器的工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//3.通过安全管理器工厂获取安全管理器
SecurityManager securityManager = factory.getInstance();
//4.将安全管理器绑定到当前运行环境
SecurityUtils.setSecurityManager(securityManager);
//5.从当前环境中获取Subject主体
Subject subject1 = SecurityUtils.getSubject();
//6.调用主体的登录方法
try {
subject1.login(new UsernamePasswordToken(username,password));
System.out.println("登录成功!");
} catch (IncorrectCredentialsException e) {
System.out.println("密码不正确");
}catch (UnknownAccountException e) {
System.out.println("用户名不存在");
}
//角色判断
boolean role2 = subject1.hasRole("role2");
System.out.println("是否有role2的角色:"+role2);
//分别判断集合中元素,返回boolean数组
boolean[] booleans = subject1.hasRoles(Arrays.asList("role1", "role2", "role3"));
for (boolean aBoolean : booleans)
{
System.out.println(aBoolean);
}
//判断当前用户是否有集合中所有角色
boolean b = subject1.hasAllRoles(Arrays.asList("role1", "role2", "role3"));
System.out.println(b); //判断权限
boolean permitted = subject1.isPermitted("user:query");
System.out.println("判断当前用户是否有user:query的权限:"+permitted); boolean[] permitted1 = subject1.isPermitted("user:query", "user:add", "user:delete");
for (boolean b1 : permitted1) {
System.out.println(b1);
}
boolean permittedAll = subject1.isPermittedAll("user:query", "user:add", "user:delete");
System.out.println(permittedAll);
}
}
这样就实现shiro.ini授权,接下来通过shiro.ini实现自定义realm:Shiro入门学习之自定义Realm(四)
Shiro入门学习之shi.ini实现授权(三)的更多相关文章
- Shiro入门学习之shi.ini实现认证及源码分析(二)
一.Shiro.ini文件 1.文件说明 ①ini(InitializationFile)初始文件:Window系统文件扩展名 ②Shiro使用时可以连接数据库,也可以不连接数据库(可以使用shiro ...
- Shiro入门学习之自定义Realm实现授权(五)
一.自定义Realm授权 前提:认证通过,查看Realm接口的继承关系结构图如下,要想通过自定义的Realm实现授权,只需继承AuthorizingRealm并重写方法即可 二.实现过程 1.新建mo ...
- Shiro入门学习与实战(一)
一.概述 1.Shiro是什么? Apache Shiro是java 的一个安全框架,主要提供:认证.授权.加密.会话管理.与Web集成.缓存等功能,其不依赖于Spring即可使用: Spring S ...
- shiro入门学习--使用MD5和salt进行加密|练气后期
写在前面 在上一篇文章<Shiro入门学习---使用自定义Realm完成认证|练气中期>当中,我们学会了使用自定义Realm实现shiro数据源的切换,我们可以切换成从关系数据库如MySQ ...
- shiro入门实例,基于ini配置
基于ini或者关系数据库的,其实都是一样的,重要的是思想. # ==================================================================== ...
- shiro入门学习--授权(Authorization)|筑基初期
写在前面 经过前面的学习,我们了解了shiro中的认证流程,并且学会了如何通过自定义Realm实现应用程序的用户认证.在这篇文章当中,我们将学习shiro中的授权流程. 授权概述 这里的授权指的是授予 ...
- Shiro入门学习之散列算法与凭证配置(六)
一.散列算法概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5.SHA等,一般进行散列时最好提供一个salt(“盐”),什么意思?举个栗子 ...
- Shiro入门学习之自定义Realm实现认证(四)
一.概述 Shirom默认使用自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,而大部分情况下需要从系统数据库中读取用户信息,所以需要实现自定义Realm,Realm接口如下: ...
- Shiro入门学习---使用自定义Realm完成认证|练气中期
写在前面 在上一篇文章<shiro认证流程源码分析--练气初期>当中,我们简单分析了一下shiro的认证流程.不难发现,如果我们需要使用其他数据源的信息完成认证操作,我们需要自定义Real ...
随机推荐
- 开启macOS的原生写入Ntfs的功能
在使用原生写入Ntfs功能前,测试了第三方的ntfs-3g的方案超级不稳定,害怕数据丢失果断放弃. 基于osxfuse的ntfs-3g:https://github.com/osxfuse/osxfu ...
- springboot13(redis缓存)
redis做springboot2.x的缓存 1.首先是引入依赖 <dependency> <groupId>org.springframework.boot</grou ...
- go 语言实现栈原理
package main import "fmt" type StackNode struct { Data interface{} //数据 Next *StackNode // ...
- css美化Div边框的样式实例*(转载)
css美化Div边框的样式实例 很多时候如果不是用了很多样式,很难把边框修饰得好看,看了一篇博文,觉得真的挺漂亮,也挺好看. 转载的博文地址 将这段美化的css代码 border:1px soli ...
- DOJ1187 : 重建家园 (分数规划 && 二分 && kruskal)
最优答案一定是一颗树 那么二分比值,不断kruskal找到最大可以满足的解就可以了 代码如下 #include <cstdio> #include <algorithm> us ...
- C. Grid game 思维+问题转化
C. Grid game 思维+问题转化 题意 每当有一行或者一列方格的时候,都可以消气这一行或者这一列,一共有两种形状的方块,一种是横的两个,一种是竖着的两个,按时间顺序放在4*4的格子里面,问怎么 ...
- 消息中间件MQTT
1.1概念 MQTT(MQ Telemetry Transport) 消息队列遥测传输协议是IBM开发的一种网络应用层的协议,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息 ...
- Linux(Mac)常用命令
df -B[G,M,K]查看磁盘剩余空间 free -mh查看内存 netstat -ntlp查看当前监听的网络端口 mount -t auto /dev/cdrom /media/cdrom挂载cd ...
- PHP基础学习笔记4
一.日期 1.1 date()函数 语法:string date ( string $format [, int $timestamp ] ) 参数:参数描述format必需,规定时间戳的格式:tim ...
- hadoop学习笔记(九):mr2HA高可用环境搭建及处步使用
本文原创,如需转载,请注明原文链接和作者 所用到的命令的总结: yarn:启动start-yarn.sh 停止stop-yarn.sh zk :zkServer.start ;:zkServer. ...