Demo下载:
访问密码 f44d (注意:charpter2是身份验证,charpter3是授权)
文档下载:
访问密码 d716
注意:这里是用Maven做的,所以不想用Maven下载对应jar就可以了。
jar下载: 访问密码 27d9
sql下载: 访问密码 9c3a
1、Authentication :身份认证/登录,验证用户是不是拥有相应的身份;2、Authorization :授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;3、Session Manager :会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的;4、Cryptography :加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;5、Web Support :Web 支持,可以非常容易的集成到 Web 环境;6、Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,提高效率;7、Concurrency :shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;8、Testing :提供测试支持;9、Run As :允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;10、Remember Me :记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。注意:记住一点,Shiro 不会去维护用户、维护权限;这 些需要我们 自己去 设计/ 提供 ; 然后通过相应的 接口注入给 给 Shiro
1、Subject :主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是 Subject,如网络爬虫,机器人等;即一个抽象概念;所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;2、SecurityManager :安全管理器;即所有与安全有关的操作都会与 SecurityManager 交互;且它管理着所有 Subject;可以看出它是 Shiro 的核心,它负责与后边介绍的其他组件进行交互,如果学习过 SpringMVC,你可以把它看成 DispatcherServlet 前端控制器;3、Realm: : 域, Shiro 从从 Realm 获取安全数据 (如用户、 角色、 权限) , 就是说 SecurityManager要验证用户身份, 那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法; 4、SessionDAO: : DAO 大家都用过, 数据访问对象, 用于会话的 CRUD, 比如我们想把 Session保存到数据库,那么可以实现自己的 SessionDAO,通过如 JDBC 写到数据库;比如想把Session 放到 Memcached 中,可以实现自己的 Memcached SessionDAO;另外 SessionDAO中可以使用 Cache 进行缓存,以提高性能;
身份验证1、principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个 principals, 但只有一个 Primary principals, 一般是用户名/密码/手机号。2、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”,即后缀匹配必须指定前缀(多个冒号就需要多个*来匹配)
身份验证:
授权:
配置文件:
配置前缀意义:[]