【Shiro】04 ini授权实现
【授权概念】
访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。
在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。
授权的前提是认证通过。
(简单说,我只有进系统了我才能知道我可以做什么,系统都进不了怎么授权)
【关键对象】
1,主体
主体,即访问应用的用户,在Shiro中使用Subject代表该用户。
用户只有授权后才允许访问相应的资源。
2,资源
在应用中用户可以访问的任何东西,
比如访问JSP 页面、查看/编辑某些数据、访问某个业务方法、打印文本等等都是资源。
用户只要授权后才能访问。
3,权限
安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权力。
即权限表示在应用中用户能不能访问某个资源,
如:访问用户列表页面查看/新增/修改/删除用户数据(即很多时候都是CRUD(增查改删)式权限控制)打印文档等等。。。
4,角色
角色代表了操作集合,可以理解为权限的集合,
一般情况下我们会赋予用户角色而不是权限,即这样用户可以拥有一组权限,赋予权限时比较方便。
典型的如:项目经理、技术总监、CTO、开发工程师等都是角色,不同的角色拥有一组不同的权限。
【授权流程】
【相关方法】
1 subject.hasRole("");
判断是否有角色 2 subject.hashRoles(List);
分别判断用户是否具有List中每个内容 3 subject.hasAllRoles(Collection);
返回boolean,要求参数中所有角色用户都需要具有. 4 subject.isPermitted("");
判断是否具有权限.
【shiro.ini配置】
#配置用户
[users]
admin=123456,role1
user01=123456,role2
user02=123456,role3
user03=123456,role2,role3 #声明角色
[roles]
role1=user:query,user:add,user:update,user:delete,user:export
role2=user:query,user:add
role3=user:query,user:export
测试类编写:
// 日志输出工具
private static final transient Logger log = LoggerFactory.getLogger(AuthenticationTest.class); @SuppressWarnings("deprecation")
public static void main(String[] args) {
String username = "admin";
String password = "123456";
log.info("My First Apache Shiro Application"); DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(new IniRealm("classpath:shiro.ini"));
SecurityUtils.setSecurityManager(defaultSecurityManager); Subject subject = SecurityUtils.getSubject(); try {
subject.login(new UsernamePasswordToken(username, password));
log.info("登陆成功");
} catch (AuthenticationException authenticationException) {
authenticationException.printStackTrace();
log.error("用户名称或者密码不符合");
} // 是否认证通过
boolean authenticated = subject.isAuthenticated();
log.info("是否认证通过:"+authenticated); // 角色验证
boolean hasRole1 = subject.hasRole("role1");
log.info("是否有role1的角色:"+hasRole1); //分别判断集合里面的角色 返回数组
List<String> roleIdentifiers= Arrays.asList("role1","role2","role3");
boolean[] hasRoles = subject.hasRoles(roleIdentifiers);
for (boolean hasRole : hasRoles) {
log.info(String.valueOf(hasRole));
} //判断当前用户是否有roleIdentifiers集合里面的所有角色
boolean hasAllRoles = subject.hasAllRoles(roleIdentifiers);
log.info(String.valueOf(hasAllRoles)); // ---------------------------------------------------------- //权限判断
boolean permitted = subject.isPermitted("user:query");
log.info("判断当前用户是否有user:query的权限 "+permitted); boolean[] permitted2 = subject.isPermitted("user:query","user:add","user:export");
for (boolean b : permitted2) {
log.info(String.valueOf(b));
} boolean permittedAll = subject.isPermittedAll("user:query","user:add","user:export");
log.info(String.valueOf(permittedAll)); }
测试结果:
[main] INFO AuthenticationTest - My First Apache Shiro Application
[main] INFO org.apache.shiro.session.mgt.AbstractValidatingSessionManager - Enabling session validation scheduler...
[main] INFO AuthenticationTest - 登陆成功
[main] INFO AuthenticationTest - 是否认证通过:true
[main] INFO AuthenticationTest - 是否有role1的角色:true
[main] INFO AuthenticationTest - true
[main] INFO AuthenticationTest - false
[main] INFO AuthenticationTest - false
[main] INFO AuthenticationTest - false
[main] INFO AuthenticationTest - 判断当前用户是否有user:query的权限 true
[main] INFO AuthenticationTest - true
[main] INFO AuthenticationTest - true
[main] INFO AuthenticationTest - true
[main] INFO AuthenticationTest - true Process finished with exit code 0
【Shiro】04 ini授权实现的更多相关文章
- Apache shiro集群实现 (二) shiro 的INI配置
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
- Shiro中的授权问题(二)
上篇博客(Shiro中的授权问题 )我们介绍了Shiro中最最基本的授权问题,以及常见的权限字符的匹配问题.但是这里边还有许多细节需要我们继续介绍,本节我们就来看看Shiro中授权的一些细节问题. 验 ...
- Shiro中的授权问题
在初识Shiro一文中,我们对Shiro的基本使用已经做了简单的介绍,不懂的小伙伴们可以先阅读上文,今天我们就来看看Shiro中的授权问题. Shiro中的授权,大体上可以分为两大类,一类是隐式角色, ...
- 【shiro】(4)---Shiro认证、授权案例讲解
Shiro认证.授权案例讲解 一.认证 1. 认证流程 2.用户密码已经加密.加盐的用户认证 (1)测试类 // 用户登陆和退出,这里我自定了一个realm(开发肯定需要自定义realm获取 ...
- shiro入门学习--授权(Authorization)|筑基初期
写在前面 经过前面的学习,我们了解了shiro中的认证流程,并且学会了如何通过自定义Realm实现应用程序的用户认证.在这篇文章当中,我们将学习shiro中的授权流程. 授权概述 这里的授权指的是授予 ...
- 第四章:shiro的INI配置
4.1 根对象SecurityManager 从之前的Shiro架构图可以看出,Shiro是从根对象SecurityManager进行身份验证和授权的:也就是所有操作都是自它开始的,这个对象是线程安全 ...
- shiro中INI配置
4.1 根对象SecurityManager 从之前的Shiro架构图可以看出,Shiro是从根对象SecurityManager进行身份验证和授权的:也就是所有操作都是自它开始的,这个对象是线程安全 ...
- Shiro身份认证授权原理
shiro在应用程序中的使用是用Subject为入口的, 最终subject委托给真正的管理者ShiroSecurityMannager Realm是Shiro获得身份认证信息和来源信息的地方(所以这 ...
- Apache Shiro 标签方式授权
Shiro提供了一套JSP标签库来实现页面级的授权控制. 在使用Shiro标签库前,首先需要在JSP引入shiro标签: <%@ taglib prefix="shiro" ...
- shiro源码篇 - shiro认证与授权,你值得拥有
前言 开心一刻 我和儿子有个共同的心愿,出国旅游.昨天儿子考试得了全班第一,我跟媳妇合计着带他出国见见世面,吃晚饭的时候,一家人开始了讨论这个.我:“儿子,你的心愿是什么?”,儿子:“吃汉堡包”,我: ...
随机推荐
- P9174
problem & blog 子任务 \(1\) 和子任务 \(2\) 都比较好做.所以我们这里不讲. 状态将是数字 \(n\) (每个颜色的频率的排序数组)的所有分区,因为当我们旋转每种颜色 ...
- golang sync.Once 保证某个动作仅执行一次的机制
type Once struct { done atomic.Uint32 m Mutex } 这段代码是 Go 语言标准库中 sync 包的一部分,定义了一个 Once 类型.Once 类型用于确保 ...
- OpenWrt安装配置Tailscale
什么是tailscale? Tailscale就是基于Wireguard的一个联网工具,无需公网地址,通过去中心化,实现各个节点之间点对点的连接.配置简单友好,支持的各类平台和客户端. 相比较其他组网 ...
- 高德的API来查询行政区域查询
高德的API来查询行政区域查询 1.api接口文档地址 https://lbs.amap.com/api/webservice/guide/api/district GET https://resta ...
- 记录一下tomcat报错日志分析(去重分类)
#!/usr/bin/env python # coding=utf-8 import os folder_path = 'E:\\Desktop' output_file = 'E:\\Deskto ...
- openEuler 20.04 TLS3 上的 Python3.11.9 源码一键构建安装
#! /bin/bash # filename: python-instaler.sh SOURCE_PATH=/usr/local/source # 下载源码包 mkdir -p $SOURCE_P ...
- selenium的各种操作
import time from selenium.webdriver import Edge from selenium.webdriver.common.by import By from sel ...
- 对于三节点集群zookeeper配置步骤:
步骤一:干净的集群,全新的hdfs在第一台主机上配置配置文件core-site.xml:<configuration><property> <name>fs.def ...
- 牛客小白月赛97 A-D题解
AAAAAAAAAAAAAAAAAAAAA -----------------------------题解------------------------------------------- 统计数 ...
- 松灵机器人scout mini小车 自主导航(1)
松灵机器人scout mini小车 自主导航 最近实验室来了个松灵机器人scout mini的底座.本着学习的目的对其进行了研究,从最基础的连接开始. 1.硬件连接准备 松灵scout mini提供了 ...