Shiro系列(一)shiro简介

项目中使用了shiro,是时候来总结一波了……

一、什么是Apache Shiro

Apache Shiro是Java的一个安全框架,总是拿来和Spring Security比较,前者比后者轻量,实现简单,容易扩展;它可以帮助我们完成权限控制,可以用来认证、授权、加密、会话管理、与web集成、缓存等,其基本功能点如图所示:
基本功能点
Shiro API 主要功能:

  • Authentication:身份认证/登录,验证用户是不是拥有相应的身份
  • Authorization:授权,即权限验证,验证已经认证的用户是否拥有某个权限、验证某个用户是否拥有某个角色
  • Session Management:会话管理,即用户登录以后就是一次会话;
  • Cryptography:加密,保护数据的安全性
  • Web Support:web支持,集成到web环境
  • Caching:缓存,用户登录后,其用户信息、拥有的角色、权限不必每次去查,存到缓存可以提高效率;
  • Concurrency:shiro支持多线程应用的并发验证,即在一个线程中开启另一个线程,能把权限自动传播过去;
  • Testing:提供测试支持
  • Run As:允许一个用户假装另一个用户的身份进行访问
  • Remember Me:记住我,即登录一次后,下次再来的时候就不用登录了

二、Shiro架构和组件

首先我们从应用程序角度来观察shiro的工作原理,如图所示:
在这里插入图片描述
应用代码直接交互的对象是Subject,其每个API的含义:

Subject:主体

主体,代表了当前的“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是主体,如第三方进程、网络爬虫、机器人等,Subject是一个抽象概念,所有的Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager,可以把Subject认为是一个门面;SecurityManager才是实际的执行者;

SecurityManager:安全管理器

安全管理器,即所有与安全有关的操作都会与SecurityManager进行交互,是Shiro框架的核心,管理所有的Subject,类似于Spring MVC的前端控制器DispatcherServlet;

Realm:域

Shiro从Realm中获取安全数据(比如用户、角色、权限),SecurityManager要验证用户身份,需要从Realm中获取相应的用户进行比较确定用户是否合法;验证用户角色/权限也需要从Realm获得相应数据进行比较,类似于DataSource,安全数据源;它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。

需要注意的是:Shiro本身不提供维护用户、权限,而是通过Realm让开发人员自己注入到SecurityManager,从而让SecurityManager能得到合法的用户以及权限进行判断;

接着我们从shiro的内部了解下shiro的架构,如图所示:
shiro架构
API了解下:

Authenticator:认证器,负责主体认证的,可以自定义实现,其需要认证策略(Authentication Strategy),即什么情况下用户认证可以通过;

Authorizer:授权器,或者叫做访问控制器,用来决定主体是否有权限进行相应的操作;控制用户能访问应用中的那些功能;

Realm:可以有1个或多个Realm,可以当做是安全数据源,可以是JDBC实现,也可以是LDAP实现,或者是内存实现等,

SessionManager:用来管理session的生命周期

SessionDAO:数据访问对象,用于会话的CRUD

CacheManager:缓存控制器,用来管理用户,角色、权限等缓存,将这些数据放入缓存中可以提高访问的性能

Cryptography:密码模块,shiro提供了一些常用组件用于密码加密解密

三、结语

以上就是Shiro架构以及组件,在之后的系列中,关于身份验证、授权等结合代码,更进一步的深入学习Shiro;

这种概念性的东西,写起来还真大同小异;

Shiro系列文章:

Shiro系列(一)shiro简介

Shiro系列(二)shiro身份认证

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值