shiro的使用

1.Shiro概述

1.1 Shiro是什么

Shiro是一个非常强大的、易于使用的、开源的、权限框架。它包括了权限校验、权限授予、会话管理、安全加密等组件。

1.2 为什么需要使用Shiro

如果你是需要设计RBAC(Role Based Access Control)基础系统,需要编写大量用于权限控制的代码时。那么你需要使用Shiro。因为Shiro已经将RBAC系统大量的代码封装好,可以减少我们大量的工作量。

1.3 Shiro需要的jar包

shiro需要的核心jar包

1.4 Shiro结构图

Shiro结构图

Authentication:权限校验,每次操作校验用户是否有访问权限
Authorization:授权,用户登录时,授予用户对应的权限
Session Management:会话管理,用于记录用户的登录状态
Cryptography:加密,加密算法的实现(SHA、MD5)
web Support:对Web项目的支持,Shiro的标签!!

2.Shiro入门

2.1.访问流程图

访问流程图
1.首先应用访问(可以使用远程调用,可以是Web请求等),Shiro通过一个Subject对象来标识当前访问的身份。这句话告诉我们,第一次访问的时候,Shiro肯定会创建一个Subject对象标签当前请求(用户)的身份。
2.SecurityManger容器创建一个Subject对象验证请求的参数,SecurityManager的作用是统一管理Subject。这句话意味着,一个SecurityManager对象管理多个Subject的对象。
3.Subject通过SecurityManger获得操作当前用户的权限,在启动的那一刻,SecurityManger就会加载shiro.ini权限配置文件,在用户登录成功后,可以根据shiro配置的信息,获得用户对应的权限。
shiro配置:是一个权限控制信息文件,里面必须包括用户的验证信息,权限的信息

2.2 .配置步骤说明

根据访问流程图,我们要使用访问Shiro权限框架的功能。首先需要有一个配置文件shiro.ini配置文件配置了用户的权限认证信息。然后通过SessionManager对象读取配置文件,获得用户身份Subject,
客户端代码通过当前用户访问有权限的操作。

由此,得出配置步骤:

第一步:任何框架都需要导入包
第二步:创建一个shiro.ini配置文件。(文件名任意编写,后缀必须为ini)
第三步:编写测试代码

2.3.配置步骤

2.3.1.第一步:导入包

所需jar包

2.3.2.第二步:shiro.ini配置文件

创建一个shiro.ini配置,编写权限认证信息。

注意事项:
1.shiro.ini文件名可以任意编写,但后缀必须是ini
shiro.ini配置文件放在classpath根目录

shiro.ini规则说明
在这里插入图片描述

在这里插入代码片

[users]
 jim = jim,admin

[roles]
 admin = *

2.3.3.第三步:创建SecurityManager对象

package cn.gzsxt.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

public class ShiroDemo {
public static void main(String[] args) {
		// 1.获得SecurityManager对象
		IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
		SecurityManager securityManager = factory.createInstance();
		
		//2.设置SecurityUtils使用的安全管理器是securityManager
		SecurityUtils.setSecurityManager(securityManager);
		
		//2.获得subject
		Subject subject = SecurityUtils.getSubject();
		AuthenticationToken token=new UsernamePasswordToken("jim", "jim");
		//3.校验用户名密码是否正确
	
		try {
			Subject resultSubject = securityManager.login(subject, token);
			//获得用户名
			System.out.println(resultSubject.getPrincipal());
			//判断是否拥有admin角色
			boolean hasRole = resultSubject.hasRole("admin");
			System.out.println(hasRole);
		} catch (AuthenticationException e) {
			System.out.println("校验失败,用户名或者密码不正确");
			e.printStackTrace();
		}
	}
}

3.Realm的使用

3.1.Realm机制的必要性

以上案例,我们看到&#x

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值