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; ...
随机推荐
- IPv6系列-彻底弄明白有状态与无状态配置IPv6地址
深入研究自动分配IPv6地址的Stateless(无状态)与Stateful(有状态)方式 小慢哥的原创文章,欢迎转载 目录 ▪ 一. Link-Local Address的生成方式 ▪ 二. Glo ...
- 向net core 3.0进击——April.WebApi从2.2爬到3.0
目录 前言 升级之路 测试 小结 前言 在之前对Swagger的变化做了调整后,就开始想着要不把之前的工程升级得了,这样就还是个demo工程,来做各种测试(当然还是因为懒),这就有了今天这个比较折腾的 ...
- Kafka0.11之RoundRobinPartitioner/HashPartitioner(Scala):
RoundRobinPartitioner/HashPartitioner: import java.util import java.util.concurrent.atomic.AtomicLon ...
- C#基于Quartz.NET实现任务调度并部署Windows服务
一.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp ...
- MySQL 和 Navicat Premium 下载及安装全过程
前言: 我对 “MySQL社区版” 的理解是:它只是一个后台服务,它的管理需要用到其他的数据库管理软件,这里我用的是 Navicat Premium,这个软件可以同时为多个数据库提供管理,比如MySQ ...
- Java 的基本程序设计结构
从Hello Word入手 public class HelloWorld { /* 第一个Java程序 */ public static void main(String[] args) { Sys ...
- drf框架接口文档
drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...
- CentOS 7.7版本中NAT上网问题
一.NAT(地址转换模式)概念 如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择.NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网. 二.具体 ...
- Roadmap of FE
未完待补充......
- 开启sql语句监控
开启sql执行语句监控 set global general_log=on; set global_log_output='table'; 修改mysql配置文件,在[mysqld]中加入 gener ...