一、概述

1、Shiro是什么?

  Apache Shiro是java 的一个安全框架,主要提供:认证、授权、加密、会话管理、与Web集成、缓存等功能,其不依赖于Spring即可使用;

  Spring Security(Oauth2)也是一个开源的权限框架,但其依赖于Spring运行,功能相对强大;而Shiro相对独立,不依赖于Spring,使用简单、灵活,所以我选择Shiro学习。哈哈~

2、Shiro基本功能

①Authentication(音标: [ɔːˌθentɪˈkeɪʃn] )

  身份认证,验证用户是不是拥有相应的身份。

②Authorization(音标:[ˌɔːθərəˈzeɪʃn])

  授权即权限验证,验证某个已认证的用户是否拥有某个权限(比如接下来我要实现的:不用用户拥有不用的菜单树)

③Session Management

  会话管理,在用户登录后,退出之前,所有信息都存在于会话中(这里可以用于sso单点登录)

④Crptography

  加密,保护数据的安全性(比如密码加密存储到数据库,而不是明文存储)

⑤Web支持

  非常容易集成到Web环境

⑥Caching

  缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率

⑦Concurrency

  Shiro支持多线程应用宝并发验证,(即在一个线程中开启另一个线程,能把权限自动传播过去)

⑧Testing

  提供测试支持

⑨Run as

  允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

⑩Remember me

  记住我,这是最常见的功能,即一次登录后,下次再来的话不用登录了

注:Shiro不会去维护用户、维护权限,所以这是我们需要设计的,然后通过相应的接口注入Shiro即可。

3、Shiro架构图(这个图特别特别重要,看懂了它就会用Shiro了)

看来看去,也就以上几个模块嘛:

①Subject

  Subject即主体,外部应用与subject进行交互,Subject记录了当前操作用户,将用户的概念理解为当前操作的主体,可能是一个通过浏览器请求的用户,也可能是一个运行的程序。Subject在Shiro中是一个接口,接口中定义了很多认证授权的相关方法,外部程序通过subject进行认证授权,而Subject是通过Security Manager安全管理器进行认证授权。

②SecurityManager

  安全管理器:对全部的Subject进行安全管理,它是Shiro的核心,负责对所有的Subject进行安全管理,通过SecurityManger可以完成subject的认证、授权等,实质上SecurityManger是通过Authenticator(图中圈3)进行认证;通过Authorizer(图中圈4)进行授权,通过SessionManager进行会话管理等,SecurityManger是一个接口,继承Authenticator,Authorizer,SessionManager三个接口。

③Authenticator

  认证器:对用户身份进行认证,Authenticator是一个接口,Shiro提供ModularRealmAuthenticator实现类,通过该实现类基本上满足大部分需求,也可自定义认证器

④Authorizer

  授权器:用户通过认证器认证通过,在访问功能时需要通过授权器判断用户是否有此功能的操作权限

⑤Realm

  领域:相当于DataSource数据源,SecurityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户身份在数据库,那么realm就需要从数据库获取用户身份信息。(这里不要单单认为realm只是从数据源取数据,它还有认证授权校验的相关代码)

⑥SessionManger

  会话管理:shiro框架定义了一套会话管理,它不依赖于web的session,所以shiro可以使用在非web的应用上;还可以将分布式应用的会话集中在一点管理,实现SSO单点登录

⑦SessionDao

  会话dao:顾名思义,对session的一套api接口,也就是对session的增删改查

⑧CacheManger

  缓存管理,将用户权限数据存储在缓存,这样可以提高性能

⑨Cryptography

  加密:Shiro提供了一套加密、解密组件,方便开发。比如提供常用的散列、加/解密等功能。

4、下载Shiro和maven镜像

  下载地址:http://shiro.apache.org/download.html

二、Shiro实战

  了解了基本的功能、架构等,是时候操练一把了……

(1)Shiro实现认证+shiro.ini配置:Shiro入门学习之shi.ini实现认证及源码分析(二)

最新文章

  1. Chrome一直提示“adobe flash player 因过期而遭阻止” ,如何解决?
  2. Android studio .gitignore 文件的内容
  3. 项目管理学习笔记之五.沟通协调能力II
  4. ABAP版连连看
  5. Java中遍历Map的几种方法
  6. mysql trigger 权限的说明
  7. 设计模式 - 模板方法模式(template method pattern) JFrame 具体解释
  8. 9.Java主要有那几种文件类型?各自的作用是什么?
  9. Pycharm 远程调试
  10. rt-thread 低优先级线程挂起高优先级线程失败
  11. SSH框架学习摸索记
  12. blfs(systemv版本)学习笔记-wget的安装与配置
  13. Mac zsh切换bash bash切换zsh
  14. 6、使用jconsole+VisualVM分析JVM
  15. [Java/Python] java调用python脚本问题记录
  16. Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(2) 自己封装的Calendar接口
  17. JAVA并发:深入分析volatile
  18. 贪心(一)NYOJ题目12
  19. selenium page object模式
  20. StreamRead和StreamWriter的使用

热门文章

  1. java fastjson:Map与json以及JSONObject ,JSONObject与String互转
  2. 在centos7下获取git代码(部署代码)
  3. torch.cat拼接 stack拼接 分块chunk
  4. Android开发实战——记账本(6)
  5. xshell配置---文件上传命令rz和下载命令sz
  6. MySQL导入含有中文字段(内容)CSV文件乱码解决方法
  7. 【转载】Java中的容器讲解
  8. Python爬虫连载7-cookie的保存与读取、SSL讲解
  9. 错误记录(一):VSCode
  10. 【visio】数据可视化 - 数据展示