Realm中配置散列

ini 文件当中配置散列

相关配置内容如下所示:

[main]
# 定义凭证匹配器
credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
# 散列算法
credentialsMatcher.hashAlgorithmName=md5
# 散列次数
credentialsMatcher.hashIterations=3
# 指定realm
myRealm=top.it6666.realm.MyRealm
# 配置散列
myRealm.credentialsMatcher=$credentialsMatcher
# 配置自定义散列
securityManager.realms=$myRealm

要保证存储在数据库中的密码是经过散列之后的,不然认证器进行认证的时候是通过你定义的规则去进行认证的,而你数据库存储的不一致会导致不成功,假如你设置认证的相关信息为盐为 BNTang 而数据库中已经存储的密码是通过 JonathanTang 盐值进行加密存储的,你登录的时候认证器去验证的时候就会导致双方不一致,所以数据库中存储的信息需要和你认证器设置的规则加密之后的信息一致才行。

首先我们自己使用 MD5 规则加密一串密文出来。

@Test
public void encryption() {
    SimpleHash simpleHash = new SimpleHash("md5", "1234", "it6666", 3);
    System.out.println(simpleHash);
}

80abd6b3faad22acb16bc1a11da51b2e

然后更改我们自定义的 Realm,更改之后的内容如下所示:

/**
 * @author BNTang
 */
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 = "BNTang";
        String password = "80abd6b3faad22acb16bc1a11da51b2e";

        // 如果输入的名称不和数据库查询出来的一致
        if (!myName.equals(username)) {
            return null;
        }

        // 如果等于,交给认证器去认证即可我们就无须关心了
        return new SimpleAuthenticationInfo(username, password, ByteSource.Util.bytes("it6666"), this.getName());
    }
}

测试方式,如下图所示:

posted @   BNTang  阅读(83)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示