第一章:shiro简介

时间:2022-07-10 00:35:04

1.1 简介

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

第一章:shiro简介

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

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

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

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

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

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

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

Testing:提供测试支持

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

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

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

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

第一章: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的架构

第一章:shiro简介

解释每个组建的意义:

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

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

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

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

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

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

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

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