1. 简单了解
    1. 常用功能
      1. 帮助系统完成认证、授权、加密、会话管理、与Web集成、缓存等
      2. Authentication
        1. :身份认证/登录,验证用户是不是拥有相应的身份;
      3. Authorization
        1. :授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
      4. Session Manager
        1. :会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
      5. Caching
        1. :缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
      6. Remember Me
        1. :记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
    2. 工作流程
    3. 认识一些名词
      1. Subject
        1. 主体,代表了当前“用户”
      2. SecurityManager
        1. 安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject
      3. Realm
        1. 域,Shiro从从Realm获取安全数据(如用户、角色、权限)
      4. SessionManager
        1. 管理主体与应用之间交互的数据
      5. CacheManager
        1. 缓存控制器,来管理如用户、角色、权限等的缓存的
      6. Authrizer
        1. 授权器,或者访问控制器,用来决定主体是否有权限进行相应的操作
      7. Authenticator
        1. 认证器,负责主体认证的
  2. 回到项目的shiro使用
    1. 从配置文件spring-shiro.xml看起,通过这个配置文件集成spring与shiro
    2. 过滤器 Shiro Filter
      1. 是整个配置文件的入口,用于拦截需要安全控制的请求进行处理
      2. 属性主要包括登录url、登录成功url、没权限url、不需要验证的url和安全管理器等
    3. 安全管理器 securityManager
      1. realm
        1. 自定义ShiroDbRealm
          1. 重写doGetAuthenticationInfo()方法
          2. 主要验证登录密码是否正确,已经获取用户的的权限和角色,交给shiro
          3. 认证步骤
          4. 1、用户提交用户名和密码
          5. 2、shiro 封装令牌(token,包含username和password信息)
          6. 3、realm 通过用户名将密码查询返回
          7. 4、shiro 自动去比较查询出密码和用户输入密码是否一致
          8. 5、进行登陆控制
          9. matcher
          10. RetryLimitCredentialsMatcher
          11. 密码错误5次锁定
      2. cacheManager
        1. 集成spring-cache作为shiro的缓存,项目中的redis和ehcache用其中一个
      3. rememberMeManager
        1. 记得登录状态管理器
      4. sessionManager
        1. 会话管理器
          1. 主要配置登录超时的session管理
    4. 注意一点
      1. Shiro不会去维护用户、维护权限; 这些需要我们自己去设计/提供; 然后通过相应的接口注入给Shiro即可