Demo下载:前端
http://yunpan.cn/c3eNWcJini8QT 访问密码 f44d (注意:charpter2是身份验证,charpter3是受权)sql
文档下载:数据库
http://yunpan.cn/c3eN8EAvLT4z9 访问密码 d716缓存
注意:这里是用Maven作的,因此不想用Maven下载对应jar就能够了。安全
jar下载:http://yunpan.cn/c3ei5KkfmwcNI 访问密码 27d9网络
sql下载:http://yunpan.cn/c3eip45Pa38us 访问密码 9c3a多线程
一、Authentication :身份认证/登陆,验证用户是否是拥有相应的身份; 二、Authorization :受权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能作事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具备某个权限; 三、Session Manager :会话管理,即用户登陆后就是一次会话,在没有退出以前,它的全部信息都在会话中;会话能够是普通 JavaSE 环境的,也能够是如 Web 环境的; 四、Cryptography :加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储; 五、Web Support :Web 支持,能够很是容易的集成到 Web 环境; 六、Caching:缓存,好比用户登陆后,其用户信息、拥有的角色/权限没必要每次去查,提升效率; 七、Concurrency :shiro 支持多线程应用的并发验证,即如在一个线程中开启另外一个线程,能把权限自动传播过去; 八、Testing :提供测试支持; 九、Run As :容许一个用户伪装为另外一个用户(若是他们容许)的身份进行访问; 十、Remember Me :记住我,这个是很是常见的功能,即一次登陆后,下次再来的话不用登陆了。 注意: 记住一点,Shiro 不会去维护用户、维护权限;这 些须要咱们 本身去 设计/ 提供 ; 而后经过 相应的 接口注入给 给 Shiro
一、Subject :主体,表明了当前“用户”,这个用户不必定是一个具体的人,与当前应用交互的任何东西都是 Subject,如网络爬虫,机器人等;即一个抽象概念;全部 Subject 都绑定到 SecurityManager,与 Subject 的全部交互都会委托给 SecurityManager;能够把 Subject 认为是一个门面;SecurityManager 才是实际的执行者; 二、SecurityManager :安全管理器;即全部与安全有关的操做都会与 SecurityManager 交互;且它管理着全部 Subject;能够看出它是 Shiro 的核心,它负责与后边介绍的其余组件进行交互,若是学习过 SpringMVC,你能够把它当作 DispatcherServlet 前端控制器; 三、Realm: : 域, Shiro 从从 Realm 获取安全数据 (如用户、 角色、 权限) , 就是说 SecurityManager 要验证用户身份, 那么它须要从 Realm 获取相应的用户进行比较以肯定用户身份是否合法; 四、SessionDAO: : DAO 你们都用过, 数据访问对象, 用于会话的 CRUD, 好比咱们想把 Session保存到数据库,那么能够实现本身的 SessionDAO,经过如 JDBC 写到数据库;好比想把Session 放到 Memcached 中,能够实现本身的 Memcached SessionDAO;另外 SessionDAO 中可使用 Cache 进行缓存,以提升性能;
身份验证 一、principals:身份,即主体的标识属性,能够是任何东西,如用户名、邮箱等,惟一便可。一个主体能够有多个 principals, 但只有一个 Primary principals, 通常是用户名/密码/手机号。 二、credentials:证实/凭证,即只有主体知道的安全值,如密码/数字证书等。
受权 规则: “资源标识符:操做:对象实例 ID” 即对哪一个资源的哪一个实例能够进行什么操做。 其默认支持通配符权限字符串,“:”表示资源/操做/实例的分割;“,”表示操做的分割; “*”表示任意资源/操做/实例。 例子: 如“user:view”等价于“user:view:*”;而“organization”等价于“organization:*”或者 “organization:*:*”。能够这么理解,这种方式实现了前缀匹配。 另外如“user:*”能够匹配如“user:delete”、“user:delete”能够匹配如“user:delete:1”、 “user:*:1”能够匹配如“user:view:1”、“user”能够匹配“user:view”或“user:view:1” 等。即*能够匹配全部,不加*能够进行前缀匹配;可是如“*:view”不能匹配 “system:user:view”,须要使用“*:*:view”,即后缀匹配必须指定前缀(多个冒号就须要 多个*来匹配)
身份验证:并发
受权:性能
配置文件:学习
配置前缀意义:[]