shiro详解(1)

shiro

为什么要用shiro

  1. 项目中的密码是否可以明文存储?

  2. 是否任意访客,无论是否登录都可以访问任何功能?

  3. 项目中的各种功能操作,是否所有用户都可以随意使用?

综上,当项目中的某些功能被使用时,需要进行安全校验,进而保证整个系统的运行秩序

在java世界中,安全管理框架有spring security 和shiro 。spring security 要依赖于spring,并且比较复杂,学习曲线比较高。shiro比较简单,而且shiro比较独立,既可以在java se中使用,也可以在java ee中使用,并且在分布式集群环境下也可以使用

shiro是一个基于java的开源的安全管理框架。可以完成认证,授权,会话管理,加密,缓存等功能。


一、Shiro架构

shiro运行流程中的3个核心的组件
Subject 、SecutiryManager 、Realm
shiro使用中,必须有的3个概念

在这里插入图片描述

1. Subject 

	安全校验中,最常见的问题是"当前用户是谁""当前用户是否有权做某事",所以考虑安全校验过程最自然的
	方式就是基于当前用户。Subject代表了当前"用户"
	应用代码直接交互的对象是"Subject" ,只要得到Subject对象马上可以做绝大多数的shiro操作
	也就是说Shiro的对外API核心就是Subject 
	Subject会将所有交互都委托给SecurityManager
	==Subject是安全管理中直接操作的对象==

2. SecurityManager
	
	安全管理器,即所有与安全有关的操作都会与SecurityManager 交互
	且其管理着所有Subject;它是Shiro的核心
	它负责与Shiro的其他组件进行交互,它相当于SpringMVC中DispatcherServlet的角色

3. Realm

	Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager 要验证用户身份,那么
	它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;
	也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作
	可以把Realm 看成Dao(数据访问入口)

二、RBAC模型

Role Base Access Controll 基于角色的访问控制
shiro采用的安全管理模型
模型中3个主体:用户、角色、权限
每个角色可以有很多个权限,每个权限可以分配给多个角色
每个用户可以有很多个用户,每个角色可以分配给多个用户
两个多对多

在这里插入图片描述

则权限访问控制,做的事是

  1. 身份校验:判断是否为合法用户

  2. 权限校验:用户要做某件事或使用某些资源,必须要拥有某角色,或必须拥有某权限

    在访问控制过程中,是要对项目中的资源(功能,数据,页面元素等)的访问,使用进行安全管理

    1. 首先照旧记录用户信息
    2. 指定用户角色
      如:学员,讲师,保洁员
    3. 对“资源”指定权限:即能对资源做的所有操作
      如:“教室”,“进入教室”,“在教室学习”,就是该资源的两个权限
    4. 将权限分配给不同的角色
      如:“进入教室”分配给“学员”,“讲师”,“保洁员”三种角色
      在“教室学习”,分配给“学员”角色
    5. 将角色分配给具体用户
      如:“莉莉”分配“学员”角色
      “丽丽”分配“保洁员”角色

二、shiro架构基本了解(暂了解即可)

shiro的结构体系:
在这里插入图片描述

  1. Authentication:认证
    验证用户是否合法,也就是登陆。
  2. Authorization:授权
    授予谁具有访问某些资源的权限。
  3. session Management:会话管理
    用户登陆后的用户信息通过session Management 来进行管理,不管是什么应用中
  4. Cryptography:加密
    提供了常见的一些加密算法,使得在应用中可以很方便的实现数据安全,并且使用很便捷
  5. Web support: web应用程序支持
    shiro 可以很方便的集成到web应用程序中
  6. Caching:缓存
    shiro提供了对缓存的支持,支持多种缓存架构:如:ehcache还支持缓存数据库:如:redis
  7. Concurrency: 并发支持
    支持多线程并发访问
  8. Testing :测试
  9. Run As :
    支持一个用户在允许的前提下使用另外一个身份登录
  10. Remember Me:记住我

shiro的架构
在这里插入图片描述

  1. Subject主体,可以是用户,也可以是第三方程序等,subject用于获取主体信息,Principals和
    Credentials

  2. Security Manager:安全管理器
    安全管理器是shiro架构的核心。由其来协调管理shiro各个组件之间的工作。

  3. Authenticator :认证器
    负责验证用户的身份

  4. Authorizer:授权器
    负责为合法的用户指定其权限。控制用户可以访问那些资源

  5. Realms:域
    用于通过shiro来完成相关的安全工作,shiro是不会去维护数据信息的。在shiro的工作过程中,数据的查询和获取工作是通过Realm 从不同的数据源来获取的。Realm 可以获取数据库信息,文本信息等。在shiro中可以有一个realm也可以有多个。


内容详解:
Authentication:用户认证

  1. 验证用户是否合法
    在这里插入图片描述
    需要提交身份和凭证个shiro
    principals 用户的身份信息,是Subject 的标识属性。能够唯一标识Subject。如电话号码,电子邮件,身份证号码等
    Credentials 凭证 :密码。是只被subject知道的密码值。可以是密码,也可以是数字证书等。
    Principals/Credentials 最常见的组合:用户/密码 。在shiro 中通常使用UsernamePassWordToken,来指定身份和凭证信息。
  2. 在shiro中用户认证流程:
    在这里插入图片描述
  3. 代码实现:
    1. 新建java项目
    2. 导入shiro相关的jar包
    3. 表写shiro的数据文件–配置
    4. 编码测试

二、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值