Shiro笔记---授权
1.搭建shiro环境(*)
idea2018.2、maven3.5.4、jdk1.8
项目结构:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.zyu</groupId>
<artifactId>idea_shiro_demo03</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.4</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency> <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
</dependencies> </project>
shiro_role_permission.ini
[users]
superbird=123456,system
bigbird=123,role1,role2 [roles]
system=InRoom:select,InRoom:insert,InRoom:xiaoFei,InRoom:update,VIP:select,VIP:gaunli,VIP:add
role1=InRoom:xiaoFei
role2=VIP:select,VIP:add
【users】
用户名=密码,角色
【roles】
角色=对应的权限
ShiroUtil(封装对应的身份验证方法 --- 只有先登录之后才能判断权限):
public class ShiroUtil { public static Subject login(String configPath,String username,String password) {
//找资源:ctrl+shift+n
//核心类:SecurityManager
Factory<SecurityManager> factory = new IniSecurityManagerFactory(configPath);
SecurityManager securityManager = factory.getInstance();
//当前用户Subject
SecurityUtils.setSecurityManager(securityManager);
Subject user = SecurityUtils.getSubject();
//模拟用户输入用户名与密码
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
try {
user.login(token);
System.out.println("登录成功");
} catch (AuthenticationException e) {
System.out.println("登录失败");
}
return user;
}
}
判断用户所拥有的角色(一个用户对应的角色可以是一个,也可以是多个)
public class ShiroDemo { public static void main(String[] args) {
Subject user = ShiroUtil.login("classpath:shiro_role_permission.ini", "bigbird", "123");
//判断用户是否拥有某个角色
boolean flag1 = user.hasRole("system");
// System.out.println("flag1="+flag1);
List<String> roles = Arrays.asList("role1", "role2","system");
boolean[] flags = user.hasRoles(roles);
System.out.println(Arrays.toString(flags));
}
}
判断用户是否拥有某个具体的权限
public class ShiroDemo01 { public static void main(String[] args) {
//判断bigbird=123的用户是否具有某个具体的权限
Subject user = ShiroUtil.login("classpath:shiro_role_permission.ini", "bigbird", "123");
boolean flag1 = user.isPermitted("InRoom:xiaoFei");
//System.out.println("flag1="+flag1); //判断某个用户是否同时具有多个权限
boolean[] flags = user.isPermitted("InRoom:xiaoFei", "InRoom:update");
// System.out.println("flags="+ Arrays.toString(flags)); try {
user.checkPermission("InRoom:xiaoFei");
System.out.println("bigbird有消费记录权限");
} catch (AuthorizationException e) {
System.out.println("bigbird有没有消费记录权限");
}
}
}
Shiro笔记---授权的更多相关文章
- Shiro笔记(三)授权
Shiro笔记(三)授权 一.授权方式 1.编程式: Subject subject=SecurityUtils.getSubject(); if(subject.hasRole("root ...
- Shiro笔记(一)基本概念
Shiro笔记(一)基本概念 一.简介 Shiro是一个Java安全框架,可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. Authentication:身份认证/登录,验证用户是 ...
- Shiro【授权、整合Spirng、Shiro过滤器】
前言 本文主要讲解的知识点有以下: Shiro授权的方式简单介绍 与Spring整合 初始Shiro过滤器 一.Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro ...
- Shiro【授权过滤器、与ehcache整合、验证码、记住我】
前言 本文主要讲解的知识点有以下: Shiro授权过滤器使用 Shiro缓存 与Ehcache整合 Shiro应用->实现验证码功能 记住我功能 一.授权过滤器测试 我们的授权过滤器使用的是pe ...
- Shiro笔记(五)JSP标签
Shiro笔记(五)JSP标签 导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags&q ...
- Shiro笔记(四)编码/加密
Shiro笔记(四)编码/加密 一.编码和解码 //base64编码.解码 @Test public void testBase64(){ String str="tang"; b ...
- Shiro笔记(二)身份验证
Shiro笔记(二)身份验证 一.核心代码 @Test public void helloWorldTest(){ IniSecurityManagerFactory factory = new In ...
- Shiro:授权的相关实现
Shiro:授权的相关实现 一.使用Shiro过滤器实现授权 设置好授权拦截跳转的请求地址 /** * 创建ShiroFilterFactoryBean */ @Bean public ShiroFi ...
- shiro的授权与认证
shiro的授权与认证 package com.cy.pj.common.aspect;import java.lang.reflect.Method;import java.util.Arrays; ...
随机推荐
- layui-table 对表格数据进行处理之后的排序问题
使用layui table过程中,将某一列的数据格式进行转换,或者将0/1状态改为是/否,或者将数字改为星星评分显示的时候都会遇到一个问题,我的表格数据转换成其他形式,同时设置了sort:true,此 ...
- 报表统计——java实现查询某年某月每天数据,没数据补0
一般图表绘制例如echarts等,返回数据格式都大同小异.重点是利用sql或者java实现数据格式的转型,接下来是关键部分: 1.前提:提供的工具方法——获取某月有多少天 //通过年份和月份确定该月的 ...
- Flask基础(07)-->正则自定义转换器
正则自定义转换器 为什么要自定义正则转换器? 因为默认转换器太过于笨重,往往不能满足我们实际业务的需求,这时候我们就需要自定义正则转换器了. 那么我们怎么自定义正则转换器呢? from flask i ...
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
- Eclipse的debug按钮介绍(三)
本文链接:https://blog.csdn.net/u011781521/article/details/55000066 http://blog.csdn.net/u010075335/ar ...
- python requests-toolbelt 生成上传multipart/form-data格式数据
需求背景 想使用requests做一个自动上传的功能,发现这里问题挺多的,就记录一下. 如上图上传功能,一般分为input标签,非input标签.我这里也不管什么标签,直接抓包看数据流. Conten ...
- C# 获取顶级(一级)域名方法
/// <summary> /// 获取域名的顶级域名 /// </summary> /// <param name="domain">< ...
- Hyper-V 下linux虚拟机静态IP上网配置的两种方式(2)
工作需要,搭建linux环境,网上搜了两种Hyper-V配置linux静态IP及上网的方式,记录一下,方便查阅,如下设置网络共享方式: win10下使用hyper-v在本机安装linux虚拟机后,网络 ...
- 【原创】(八)Linux内存管理 - zoned page frame allocator - 3
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- RAID 10 配置流程
1.在虚拟机中再添加5块硬盘: 2.fdisk -l 可以查看当前虚拟机中的磁盘情况. 3.使用mdadm命令创建RAID10,名称为”/dev/md0″. -C代表创建操作,-v显示创建过程,-a ...