Java安全(权限)框架 - Shiro 功能讲解 架构分析
作者 : Stanley 罗昊
【转载请注明出处和署名,谢谢!】
简述Shiro
Shiro出自公司Apache(阿帕奇),是java的一个安全和权限框架;
在这之前,我想各位应该也学过 SpringMvc、struts2。他们都是web的mvc框架,紧接着一些ORM框架,比如Mybatis 、Hibernate,而这个Shiro更加主流、也更加简单易用,它不但是适用于javaSE环境,也适用于javaEE环境;
Shiro可以完成如:认证、授权、加密、会话管理、与web集成、缓存等;
Shiro功能简介
Authentication
认证,说白了就是登陆,我们可以利用Shiro完成登陆,登录时的密码匹配,就是Shiro帮我们完成的
Authorization
授权,当我们点一个连接或一个按钮的时候,Shiro会帮我们判断你有没有这个权限;
SessionManagement
Shiro向我们提供的Session;
我们在web环境下可以使用SesCryptsion,当然,这个是httpSession,如果使用Shiro的话,即便你身处非web环境下,我们也可以使用Session,那个Session,就是Shiro给我们提供的;
Cryptography
加密,到后面会有具体详解;
Web Support
可以很容易的跟,JavaEE应用进行集成;
Caching
可以在多线程的情况下进行授权,认证;
Tssting
测试
Caching
Shiro提供了缓存模块,让我们的运行速度更快;
Run As
让,已经登录的用户,以另外一个用户的身份,来操作当前的系统;
RememberMe
记住我
Shiro架构
从外部看,最主要的组件有两个:
SecunityManager 、 Realm
架构图讲解:
Application Code,当应用程序去访问Shiro的时候,那么就一定会是Subject(这个就表示当前用户),比如你等没登录、如何登陆、你是不是可以访问某一个权限、都是要去搞这个Subject,它是一个门面;
而,后面的核心是SecurityManager,它就像一个大管家一样,它管理者Shiro的各个组件;
当我们需要访问一些安全数据的时候,比如:获取用户信息,获取权限信息,我们就需要用到这个Reaim,它相当于是一个SecrityDAO
Shiro架构详细分析
subject:应用代码直接交互点对象是Subject,也就是说Shiro的对外API核心就是Subject。Subject代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫、机器人等;
与Subject的交互都会委托给SecurityManager才是实际的执行者;
SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且其管理所有Subject;可以看出他是Shiro的核心,它负责与Shiro的其他组装件进行交互,它相当于SpringMVC中的DispatcherServlet
Realm:Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager需要验证用户身份,那么它需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource