shiro

作者: 坚守一份信念_8b7a | 来源:发表于2018-05-04 21:41 被阅读0次

    - 常用单词

      1. Authentication:身份认证/登录,验证用户是不是拥有相应的身份;

      2. Authorization:授权,即权限验证

      3. Session Manager:会话管理,即用户登录后就是一次会话

      4. Cryptography:加密,保护数据的安全性

      5. Web Support:Web支持,可以非常容易的集成到Web环境

      6. Caching:缓存

      7. Concurrency shiro支持多线程引用的并发验证

    - 认证概念分析

    -核心概念

    Subject:主体,可以看到主体可以是任何可以与应用交互的“用户”

    SecurityManager:相当于SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher;是Shiro的心脏;所有具体的交互都通过SecurityManager进行控制;

    它管理着所有Subject、且负责进行认证和授权、及会话、缓存的管理。

    Authenticator:认证器,负责主体认证的,即什么情况下算用户认证通过了,这是一个扩展点,如果用户觉得Shiro默认的不好,可以自定义实现;其需要认证策略(Authentication Strategy)

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

    Realm:可以有1个或多个Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是JDBC实现,也可以是LDAP实现,或者内存实现等等;由用户提供;

    注意:Shiro不知道你的用户/权限存储在哪及以何种格式存储;所以我们一般在应用中都需要实现自己的Realm;

    SessionManager:如果写过Servlet就应该知道Session的概念,Session呢需要有人去管理它的生命周期,这个组件就是SessionManager;

    而Shiro并不仅仅可以用在Web环境,也可以用在如普通的JavaSE环境、EJB等环境;所有呢,Shiro就抽象了一个自己的Session来管理主体与应用之间交互的数据;可以实现分布式的会话管理;

    SessionDAO:DAO大家都用过,数据访问对象,用于会话的CRUD,比如我们想把Session保存到数据库,那么可以实现自己的SessionDAO,通过如JDBC写到数据库;比如想把Session放到redis中,可以实现自己的redis  SessionDAO;另外SessionDAO中可以使用Cache进行缓存,以提高性能;

    CacheManager:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能

    Cryptography:密码模块,Shiro提高了一些常见的加密组件用于如密码加密/解密的。

    操作

    在resources中创建shiro.ini文件

    shiro.ini文件 自定义一个realm 测试方法

    执行流程分析

    1、调用subject.login方法进行登录,其会自动委托给securityManager.login方法进行登录;

    2、securityManager通过Authenticator(认证器)进行认证;

    3、Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带,相当于数据源 );

    4、IniRealm先根据token中的账号去ini中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。

    5、最后调用Subject.logout进行退出操作。

    相关文章

      网友评论

          本文标题:shiro

          本文链接:https://www.haomeiwen.com/subject/hkyjrftx.html