Keywords:Subject、SecurityManager、Realm

依赖关系

  1. SecurityManager管理cacheManager缓存和sessionManager会话
  2. SessionManager管理sessionDAO会话DAO、sessionIdCookie会话ID生成器、sessionValidationScheduler会话验证调度器
  3. CacheManager通过使用Ehcache或者Redis实现
  4. Realm通过自己自定义或者其他方式的权限存储来实现

Tips:

  1. 在普通的WEB项目中,我们可以选择使用native session或者是HttpSession,通过设置securityManager的sessionMode参数为http或native即可
  2. securityManager的sessionMode参数设置为native时,那么shrio就将用户的基本认证信息保存到缺省名称为shiro-activeSessionCache的Cache中
  3. SessionDao的时候不设置CacheManager也可以使用缓存是因为他们都实现了CacheManagerAware接口:applyCacheManagerToSessionManager会把CacheManager设置到SessionManager中,SessionManager又会把CacheManager设置到SessionDao。
  4. 如果修改了用户的权限,而用户不退出系统,修改的权限不会生效,需要手动调用realm的clearCache方法清除
  5. filterChainDefinitions过滤器常用配置

    1
    2
    3
    4
    5
    /admins/**=anon 表示可匿名使用
    /admins/user/**=authc 表示需认证才能使用
    /admins/user/**=user 表示必须存在用户,当登入操作时不做检查
    /admins/user/**=perms[user:add:*] 参数可写多个,如/admins/user/**=perms["user:add:*,user:modify:*"]
    /admins/user/**=roles[admin] 参数可写多个,如/admins/user/**=roles["admin,guest"]