前言
Apache Shiro是一个强大的Java安全框架,提供了身份验证、授权、加密和会话管理功能。自定义Realm和使用散列算法是Shiro中两个关键的概念。
创建一个类继承 AuthorizingRealm
,然后覆盖 doGetAuthenticationInfo
方法,在此方法当中去从数据库中获取用户信息,交给验证器去验证用户的信息是否合法,如下图所示:
/**
* @author yby6
*/
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// 获取用户名
String username = (String) token.getPrincipal();
// 假如以下定义的用户名和密码是从数据库中查询出来的,实际中需要注入Dao去数据库中进行查询然后进行验证查询出来的信息是否合法
String myName = "yby6";
String password = "1234";
// 如果输入的名称不和数据库查询出来的一致
if (!myName.equals(username)) {
return null;
}
// 如果等于,交给认证器去认证即可我们就无须关心了
return new SimpleAuthenticationInfo(username, password, this.getName());
}
}
在 ini
文件当中在进行配置一下,配置我们自定义的 Realm,让安全管理器使用 Realm 的时候,让他使用我们定义好的 Realm,配置完成了之后启动运行即可。测试方式同我们之前的方式一样的。
myRealm=top.it6666.realm.MyRealm
securityManager.realms=$myRealm
概述
散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如 MD5
、SHA
等。
使用 Shiro 进行散列密码
- Md5Hash
@Test
public void encryption() {
Md5Hash md5Hash = new Md5Hash("yby6");
System.out.println(md5Hash);
}
通过加盐的方式来对密码进一步保护。
代码语言:java复制@Test
public void encryption() {
Md5Hash md5Hash = new Md5Hash("yby6", "it6666");
System.out.println(md5Hash);
}
还可以进行二次散列。
代码语言:java复制@Test
public void encryption() {
Md5Hash md5Hash = new Md5Hash("yby6", "it6666", 2);
System.out.println(md5Hash);
}
Md5Hash的几个参数主要是:
- 第一个:需要加密的信息
- 第二个:盐
- 第三个:散列次数
- SimpleHash
@Test
public void encryption() {
SimpleHash simpleHash = new SimpleHash("md5", "yby6", "it6666", 2);
System.out.println(simpleHash);
}
SimpleHash的几个参数主要是:
- 第一个:算法名称
- 第二个:需要加密的信息
- 第三个:盐
- 第四个:散列次数
最后
本期结束咱们下次再见