一、HelloWorld
在类路径下加入如下 jar 包
在类路径下加入如下配置文件: samples\quickstart\src\main\resources*。
在 src 下加入 samples\quickstart\src\main\java\ Quickstart.java
修改 log4j.properties,只保留如下部分
二、Shiro 配置基础:users
1、Shiro 被设计成能够在任何环境下工作,从简单的命令行应用程序到企业群集应用。由于环境的多样性,使得 Shiro 可以使用多种配置机制。
2、ini 配置:ini 实际上是一个文本配置,包含了由唯一命名的项来组织的键/值对。
3、[users] 部分允许定义一组静态的用户帐户
每行的格式:username = password, roleName1, roleName2, …
三、Shiro 配置基础:roles
1、[roles] 部分允许把定义在 [users] 部分中的角色与权限关联起来
每行的格式:rolename = permissionDefinition1,
permissionDefinition2, …
permissionDefinition 是一个任意的字符串,但大多数人将会使用符合 org.apache.shiro.authz.permission.WildcardPermission 格式的字符串。
注意:
如果一个独立的 permissionDefinition 需要被内部逗号分隔(例如,printer:5thFloor:print,info),则需要用户双引号环绕该定义,以避免错误解析。
如果角色不想关联权限,则不需要在 [roles] 部分把它们列出来。只需定义在 [user] 部分中定义角色名就足以创建尚不存在的角色。
2、仅定义非空的 [users] 或 [roles] 部分就将自动地触发org.apache.shiro.realm.text.IniRealm 实例的创建
四、Shiro 的 Permissions
1、基础语法之简单的字符串:即用简单的字符串来表示一个权限,如:user (相当于:user:*)
2、基础语法之多层次管理:
一、例如:user:query、user:edit
二、冒号是一个特殊字符,它用来分隔权限字符串的下一部件:第一部分是权限被操作的领域(打印机),第二部分是被执行的操作。
三、多个值:每个部件能够保护多个值。因此,除了授予用户 user:query 和 user:edit 权限外,也可以简单地授予他们一个:user:query, edit
四、还可以用 * 号代替所有的值,如:user:* , 也可以写:*:query,表示某个用户在所有的领域都有 query 的权限
五、身份认证:Authentication
1、Authentication :身份验证——通过提交用户的身份和凭证给 Shiro,以判断它们是否和应用程序预期的相匹配。
2、基本概念
一、Principals(身份):Subject 的 identifying attributes(标识属性)。比如我们登录提交的用户名。
二、Credentials(凭证):用来作为一种起支持作用的证据,此证据包含身份证明。比如我们登录提供的密码
3、认证的基本步骤
一、收集Subjects 提交的Principals(身份)和Credentials(凭证);
二、提交Principals(身份)和Credentials(凭证)进行身份验证;
三、如果提交成功,则允许访问,否则重新进行身份验证或者阻止访问。
六、身份认证 – 示例代码
1、AuthenticationToken:Shiro 中代表提交的 Principals(身份) 和 Credentials (凭证) 的身份验证系统的最基本接口。
3、UsernamePasswordToken :AuthenticationToken 的接口的实现类,支持最常见的用户名/密码的身份验证
3、提交用户名/密码进行认证
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);
4、处理认证成功和失败
认证成功:没有返回,也没有异常,通过。
认证失败,拋出异常,可以在程序中捕获并处理