一篇文章让你读懂什么是shiro框架

一篇文章让你读懂什么是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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值