1.1 简介

Apache Shiro是java的一个安全框架,相当简单,没有Spring Security功能强大,但是实际工作中大多使用shiro就够了。可以帮助我们完成:认证,授权,加密,会话管理,web集成,缓存等,基本功能如下所示。

Authentication:身份认证/登录,验证用户是不是拥有对应的身份

Authorization:权限验证,验证是否拥有某个权限,可以验证的那个用户是否拥有某个角色,用户是否对某个资源具有权限

Session management:会话管理,用户登录就是一次会话,没有关闭浏览器之前,信息都会存到session中

Cryptography:加密,保护数据安全性,如密码加密存到数据库

Web Support:Web支持,可以集成到web环境

Caching:缓存,比如用户登陆后,用户信息和拥有的权限不必每次去查,这样可以提高效率

Concurrency:支持多线程的并发验证,在一个线程中重新开启一个线程,能把权限自动传播过去

Testing:提供测试支持

Run As:允许一个用户假装成另一个用户的身份进行登录

Remember me: 记住我,一次登录之后,下次就不用登陆了

 切记:shiro不会去维护用户,维护权限,需要我们自己去设计,通过接口注入到shiro

1.2从应用程序角度来看Shiro如何完成工作

可以看到,应用代码直接交互的对象是Subject,也就是说Shiro对外Api核心就是Subject,每个API的含义:

Subject:主体,代表当前“用户”,不一定是个具体的人,只要与当前应用交互的任何东西都是Subject,如爬虫,机器人,所有的Subject都绑定到SecurityManager,与Subject的所有交互都会委托SecurityManager,可以理解为,Subject是门面,SecurityManager是执行者。

SecurityManager:安全管理器,所有与安全有关的操作都会与SecurityManager交互,他管理者所有的Subject,是Shiro的核心,他负责与后边介绍的其他组件进行交互。

Realm:域,Shrio从Realm获取安全数据(用户,角色,权限),就是说SecurityManager要验证用户身份,从Realm获取相应用户,权限/角色进行比较来确定的,就是安全数据来源。

举例:一个最简单的shiro应用:

1.应用代码通过subject来进行认证和授权,而subject又委托给SecurityManager

2.我们将用户权限信息,注册到realm中,SecurityManager根据realm中的安全信息进行验证

1.3从Shiro内部来看下Shiro的架构

解释每个组建的意义:

Subject:主体,任何与应用进行交互的都是Subject

SecurityManager:具体交互交给SecurityManager进行,管理所有Subject,负责进行认证和授权,会话,缓存的管理。

Authenticator:认证器,可以进行扩展,如果觉得shiro默认的不好,可以传入认证策略去自定义实现

Realm:安全数据来源,可以是一个或者是多个,shiro不管你的用户或者权限是什么,怎么存储的,所以我们一般都要在程序中实现自己的Realm

SessionManager:管理session,抽象了一个自己的session来管理主体和应用之间的交互数据,可以实现自己的分布式会话

SessionDAO:数据访问对象,用于会话的CRUD(增删改查),可以通过实现SessionDAO把session放到想要放的位置,如数据库或者是Memcached,SessionDAO中可以使用Cache进行缓存,以提高性能

CacheManager:缓存控制器,来管理用户,角色,权限等的缓存,以提高性能

Cryptography:加解密模块,加入了一些常见的加密组件用户密码解密/解密

第一章:shiro简介的更多相关文章

  1. 《跟我学Shiro》学习笔记 第一章:Shiro简介

    前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...

  2. 第一章 Shiro简介——《跟我学Shiro》(转)

    目录贴:跟我学Shiro目录贴 1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可 ...

  3. 第一章 Shiro简介——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2018936 目录贴:跟我学Shiro目录贴 1.1  简介 Apache Shiro是Java ...

  4. 第一章 C++简介

    第一章  C++简介 1.1  C++特点 C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言,C++模板支持的泛型编程. 1.2  C语言及其编程 ...

  5. python 教程 第一章、 简介

    第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...

  6. 学习笔记-[Maven实战]-第一章:Maven简介

    Maven简介: Maven 可翻译为:知识的积累,也可以翻译为"专家"或"内行". Maven 是一个跨平台的项目管理工具,是Apache组织中一个很成功的开 ...

  7. 《JavaScript高级程序设计》——第一章JavaScript简介

    第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...

  8. 第一章 Mysql 简介及安装和配置

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  9. python第一章:简介与安装--小白博客

    Python简介 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项 ...

  10. 用 WEKA 进行数据挖掘 ——第一章:简介

    1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中 ...

随机推荐

  1. executssql 函数的每一句代码的意思

    Public Function Executesql(ByVal sql As String, Msgstring As String) As ADODB.Recordset Dim cnn As A ...

  2. SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)

    前言 接下来我们将SQL Server基础系列还剩下最后几节内容结束,后续再来讲解SQL Server性能调优,我们开始进入主题. SQL Server事务对本地变量影响 事务对变量影响具体是指什么意 ...

  3. shell监控网卡流量

     #!/bin/bashRx=`ifconfig  eno16777736 | grep RX | grep packets | awk '{print $5}'`Tx=`ifconfig  eno1 ...

  4. struts2.5框架使用通配符指定方法(常见错误)

    在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace="/" extends=&quo ...

  5. spring mvc 结合 Hessian 配置

    spring mvc 结合 Hessian 配置 1.先在web.xml中配置 <!-- Hessian配置 --> <servlet> <servlet-name> ...

  6. mysql之连接localhost与127.0.0.1的区别

    引言 在聊天群里看到有人提到 mysql 中 localhost 和 127.0.0.1 的区别,这个之前并没有仔细考虑过.现在来学习下. localhost 与 127.0.0.1 区别 local ...

  7. Flex 布局教程

    今天给大家分享一下flex布局的语法 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于 ...

  8. 用ASP.NET创建网站

    ASP.NET提供三种框架来创建web应用:WebForms,ASP.NET MVC和ASP.NET WebPages.这三种框架都是稳定成熟的,你可以用任何一种方式开发一个很棒的web应用.不管你选 ...

  9. MyBatis从入门到放弃四:一对多关联查询

    前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...

  10. Python 模块之 string.py

    用法 字符串常量: import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.asc ...