每日总结
一、Shiro概念以及组成
1. 概念:Apache Shiro是一个强大易用的Java安全框架,提供了认证,授权和加密会话管理等功能,Shiro不仅可以使用在JavaSE环境,也可以用在JavaEE环境下
2.组成部分
3.涉及到的名词
Subject:主题
Security:安全
Reala:领域、范围
Authenticator:认证器
Authentication:认证
Authorizer:授权器
Authorization:授权
Cryptography:密码、加密
Credential:证书、凭证
Matcher:匹配器
Principal:身份
详细解释:
二、Shiro安全框架中的ini配置
ini配置:
a.main:提供了对跟对象SecurityManager及其依赖的配置
b.users:提供了对用户/密码及其角色的配置, 用户名=密码,角色1,角色2
c.roles:提供了角色及权限直线关系的配置,角色=权限1,权限2
d.urls:用于web,提供了对web url拦截相关的配置,url=拦截器【参数】,拦截器
示例:
三、 Shiro内置的JDBCRealm
1. Realm:域,领域,Realm 充当了 Shiro 与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro 会从应用配置的 Realm 中查找用户及其权限信息。
从这个意义上讲,Realm 实质上是一个安全相关的 DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给 Shiro 。当配置 Shiro时,你必须至少指定一个 Realm ,用于认证和(或)授权。配置多个 Realm 是可以的,但是至少需要一个。
Shiro 内置了可以连接大量安全数据源(又名目录)的 Realm,如 LDAP、关系数据库(JDBC)、类似INI 的文本配置资源以及属性文件等。如果缺省的 Realm 不能满足需求,你还可以插入代表自定义数据源的自己的 Realm 实现。
2.AuthenticatingRealm类:认证使用的Realm,只包含认证的方法,认证时调用doGetAuthenticationInfo方法,三个参数的含义:
参数的含义:
3.使用内置JDBCRealm对表中数据进行认证需要注意:默认查的表名为users表,默认查询的属性名为userName和passWord
四、加密算法
1.加密算法:加密算法通常分为对称加密算法(加密与解密密钥相同)和非对称算法(加密密钥和解密密钥不同),其中非对称加密算法适合互联网的发展
a.给原文加入随机数生成新的MD5值称为加盐,ByteSource类型通过借助ByteSource类的util方法完成数据的转化叫加盐
b.加密的次数称为迭代
2.代码实现
五、如何使用Shiro进行认证和授权(自定义Realm,忽略JdbcRealm代码)
1.添加Shiro安全框架需要的依赖,配置Shiro.ini文件
添加依赖:
配置Shiro.ini文件:
2.创建Java类继承AuthorizingRealm,并且重写doGetAuthenticationInfo:认证的方法以及doGetAuthorizationInfo:授权的方法
3.编写AuthenticationTest测试类
运行结果:
数据库中表中数据: