文章目录
一篇文章让你读懂什么是shiro框架
1、什么是权限管理
权限管理属于安全管理的范畴、简单的说就是对用户的访问进行控制你是身份、你就能访问访问到那个级别的数据
2、什么是身份认证
判断一个用户 是否是合法用户的这个处理的过程就叫做身份认证最常用的是通过简单的用户名和密码 进行身份认证、如果你的用户名和密码在数据库中存在的 、那么说明你是合法的 否则不合法
3、用户名和密码身份认证的流程
4、关键对象
Subject:主体
访问该系统的用户、程序、在咋们的上面进行认证的都称为主体
简单的说、谁去认证那么这个主题就是谁
Primcipal:身份信息
就是咋们上面的Subject进行身份认证的标识、标识必须具有唯一性
唯一性的:手机号、用户名、邮箱地址
简单跟你说、就是你带的申明信息去进行认证那么这个Primcipal就是什么
credential:凭证信息
密码、安全信息(token)
5、授权流程是什么
6、基本的权限模型
权限模型是啥?
模型简单的说就相当于是一个套路、这个套路简单的说就是我们在做项目的时候 如果遇到一个项目中 有多种不同身份的用户(角色)使用这个系统 而且不同身份的这些用户还拥有不同的访问权限的时候 我们在设置数据库的时候的这个套路
商城项目: 平台 买家 卖家 ==============> 角色
不同身份的用户还具有不同的访问权限
角色 实际上 就是权限的一个集合
我们在做一个系统的时候、那么这个时候 菜单(按钮、超链接、菜单)
资源:官方的解释:一切能够被计算机识别的图片、文字、文件等等都成为资源
项目开发中所指的这个资源:指的是页面上的所有的按钮、图片、文字、超链接。。。
7、通用的权限模型
7.1、表里面到底都有哪些字段
用户表
用户id 用户名 ....
角色表
角色id 角色名字 角色描述
用户角色表
用户id 角色id
权限资源表
权限资源id 权限名字 权限的描述 type(per|res) resName resPath 显示区域的编码
角色权限表
角色id 权限的id
8、目前市场上通用的权限管理框架
shiro Spring Security OAuth2
Spring Security 这个框架是有依赖性的 Spring
OAuth2:第三方登陆、公众平台
shiro:这个框架有个优点,没有框架的依赖、任何平台都可以用
9、shiro是什么
shiro一个授权和认证的这样一个框架
简单的给你说、就是以前咋们认证和授权的所有代码、shiro都给咋们写好了、而且封装好了、我们只需要按照这个框架提供的API来简单的集成到咋们的项目中就可以了
10、shiro能干什么
认证、授权、Cache的管理、Session的管理、rememberMe功能的实现、登陆、退出…
11、shiro的整体架构是什么
11.1、shiro中常见的名词解释
Subject:登陆的这个用户(用户、程序) 、谁认证那么这个主体就是谁
Principal:用户名(还可以是用户信息的封装)
Credential:密码
Token:令牌(用户名+密码的封装)----进行进行认证的封装对象
这个的对象并不是前后分离的这个token
Security Manager:安全管理器(只要使用了shiro框架那么这个对象都是必不可少的)
Authenticator:认证器(主要做用户身份认证、简单跟你说就是用来登陆的时候做身份校验的)
Authrizer:授权器(简单的说就是用来做用户的授权的)
Realm:用户认证和授权的时候 和数据库交互的对象(这里面干的事情就是从数据库查询数据 封装成token然后取进行认证和授权)
12、shiro的第一个helloworld程序
12.1、导包
<!--导入shiro的包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.3.2</version>
</dependency>
12.2、在resource下创建模拟数据库的文件
[users]
xiaobobo=123
xiaowangzi=123
12.3、编写测试代码完成用户的认证
public static void main(String[] args){
//获取安全管理器的工厂
IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
//通过安全管理器的工厂 获取安全管理器
SecurityManager securityManager = securityManagerFactory.createInstance();
//将安全管理器设置到运行环境中
SecurityUtils.setSecurityManager(securityManager);
//获取当前操作的主体
Subject subject = SecurityUtils.getSubject();
//接下来就应该将用户名和密码丢进去测试了
//用户名 和 密码 =====> 应该是前端页面传过来的
//创建token
UsernamePasswordToken passwordToken = new UsernamePasswordToken("xiaobobo","123");
//传递token进行校验
subject.login(passwordToken);
//这里的校验是去 shiro的内部进行校验
System.out.println("用户的认证状态:"+subject.isAuthenticated());
subject.logout();
System.out.println("用户的状态是:"+subject.isAuthenticated());
}
13、源码的解读
DelegatingSubject.java
DefaultSecurityManager.java
AuthenticatingSecurityManager.java
AbstractAuthenticator.java
ModularRealmAuthenticator.java
AuthenticatingRealm.java
SimpleAccountRealm.java
比较密码的时候执行的方法AuthenticatingRealm.java
HashedCredentialsMatcher.java
SimpleCredentialsMatcher.java
希望大家关注我一波,防止以后迷路,有需要的可以加我Q讨论互相学习java ,学习路线探讨,经验分享与java Q:2415773436