一、概述

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实现认证及源码分析(二)

Shiro入门学习与实战(一)的更多相关文章

  1. Shiro入门学习之shi.ini实现授权(三)

    一.Shiro授权 前提:需要认证通过才会有授权一说 1.授权过程 2.相关方法说明 ①subject.hasRole("role1"):判断是否有该角色 ②subject.has ...

  2. shiro入门学习--使用MD5和salt进行加密|练气后期

    写在前面 在上一篇文章<Shiro入门学习---使用自定义Realm完成认证|练气中期>当中,我们学会了使用自定义Realm实现shiro数据源的切换,我们可以切换成从关系数据库如MySQ ...

  3. Shiro入门学习之散列算法与凭证配置(六)

    一.散列算法概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5.SHA等,一般进行散列时最好提供一个salt(“盐”),什么意思?举个栗子 ...

  4. Shiro入门学习之shi.ini实现认证及源码分析(二)

    一.Shiro.ini文件 1.文件说明 ①ini(InitializationFile)初始文件:Window系统文件扩展名 ②Shiro使用时可以连接数据库,也可以不连接数据库(可以使用shiro ...

  5. shiro入门学习--授权(Authorization)|筑基初期

    写在前面 经过前面的学习,我们了解了shiro中的认证流程,并且学会了如何通过自定义Realm实现应用程序的用户认证.在这篇文章当中,我们将学习shiro中的授权流程. 授权概述 这里的授权指的是授予 ...

  6. Shiro入门学习之自定义Realm实现授权(五)

    一.自定义Realm授权 前提:认证通过,查看Realm接口的继承关系结构图如下,要想通过自定义的Realm实现授权,只需继承AuthorizingRealm并重写方法即可 二.实现过程 1.新建mo ...

  7. Shiro入门学习之自定义Realm实现认证(四)

    一.概述 Shirom默认使用自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,而大部分情况下需要从系统数据库中读取用户信息,所以需要实现自定义Realm,Realm接口如下: ...

  8. Shiro入门学习---使用自定义Realm完成认证|练气中期

    写在前面 在上一篇文章<shiro认证流程源码分析--练气初期>当中,我们简单分析了一下shiro的认证流程.不难发现,如果我们需要使用其他数据源的信息完成认证操作,我们需要自定义Real ...

  9. Shiro learning - 入门学习 Shiro中的基础知识(1)

    Shiro入门学习 一 .什么是Shiro? 看一下官网对于 what is Shiro ? 的解释 Apache Shiro (pronounced “shee-roh”, the Japanese ...

随机推荐

  1. 【Redis运行状态下切换RDB备份至AOF备份】

    "redis持久化方式有哪些?又有何区别? rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能. aof:以追加的方式记录redis操作日志的文件,可最大程 ...

  2. 掩膜(mask)

    1.掩膜(mask)的定义 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片 ...

  3. SQLServer使用链接服务器远程查询

    --创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogi ...

  4. 只想remove parentNode的一部分children

    parentNode.removeChildByTag(0); let childNode = new cc.Node(); parentNode.addChild(childNode); child ...

  5. ubuntu---yolo报错darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.

    装好darknet后,直接测试的时候,报错: darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.解决办法是打开yolov3.cfg ...

  6. RTMP服务器搭建(nginx+rtmp)

    参考文章:https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.5 ...

  7. select poll和 epoll

    select .poll.epoll 都是多路io复用的机制,i/o多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知乡音的程序进行相应的读写操作.但s ...

  8. 【转载】Java中的容器讲解

    转自:http://blog.csdn.net/garfielder007/article/details/52143794 Set,List,Map,Vector,ArrayList的区别 Java ...

  9. android WebView缩放时卡顿问题

    问题描述: WebView 在双指缩放页面时会卡顿 解决过程:有试过打开硬件加速android:hardwareAccelerated="true" 还是没用,纠结了一天,最后屏蔽 ...

  10. 09day vi命令详解

    vi有三种模式(互相切换) 1. 命令模式 2. 插入模式(编辑模式) 3. 低行模式 三种模式的切换方法: 使用技巧 vi 文件信息 i --- 进入编辑模式 esc --- 退出编辑模式 :wq ...