Shiro 集成 Spring 之加密

本章我们来讲解,如果使用 Shiro 集成 Spring 后,使用加密功能。本章基础代码为上一章 : Shiro 集成 Spring 中的代码。

我们这里演示使用 md5 散列算法进行加密, 并用 TestSalt 作为盐。

首先导入上一章的代码,然后修改 spring-shiro.xml ,添加内容:

<bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
    <property name="hashAlgorithmName" value="md5" />
</bean>

然后将此凭证匹配器 credentialsMatcher 注入到 Realm 中 :

<bean id="myRealm" class="im.zhaojun.realm.MyRealm">
    <property name="credentialsMatcher" ref="credentialsMatcher"/>
</bean>

并在 Realm 中的 doGetAuthenticationInfo 方法里添加盐的配置 :

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
        throws AuthenticationException {

    System.out.println("MyRealm doGetAuthenticationInfo...");

    String username = (String) authenticationToken.getPrincipal();
    User user = selectUserByUserName(username);
    if (user == null) {
        throw new UnknownAccountException("当前账户不存在");
    }
    return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), ByteSource.Util.bytes("TestSalt"), super.getName());
}

既然为 Relam 配置了凭证匹配器,那么就应该把我们存储的密码也进行加密,原始我们的密码为 123456,这里我们使用 md5 散列算法进行加密,并使用 TestSalt 作为 :

public class GenerateHash {
    public static void main(String[] args) {
        Md5Hash md5Hash = new Md5Hash("123456", ByteSource.Util.bytes("TestSalt"));
        System.out.println(md5Hash.toString());
    }
}

// 输出结果为 e5f728a966d050296c428290c9160dda

然后我们将 Realm 中获取的密码改为加密后的值 e5f728a966d050296c428290c9160dda :

private User selectUserByUserName(String username) {
    if ("zhao".equals(username)) {
        return new User(username, "e5f728a966d050296c428290c9160dda");
    }
    return null;
}

同上一章,运行项目,进行登陆测试,即可检验结果。

本章代码地址 : https://github.com/zhaojun1998/Premission-Study/tree/master/Permission-Shiro-05/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张泽旭的专栏

基于spring boot sftp文件上传

对sftp文件上传将行封装,实现连接的单例模式,完成线程安全的改进,sftp文件上传下载失败的重试。

44210
来自专栏冰霜之地

Realm数据库 从入门到“放弃”

Realm是由Y Combinator公司孵化出来的一款可以用于iOS(同样适用于Swift&Objective-C)和Android的跨平台移动数据库。目前最...

59820
来自专栏技术之路

设计模式:命令模式

 今天说一下命令模式 命令模式 将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其它对象。命令模式也支持可撤销的操作。这样将“行为请求者”与“行为实现...

18750
来自专栏赵俊的Java专栏

Shiro加密

安全总是最重要的,对于用户的数据,我们一般都不会以原密码明文保存,而是经过加密后保存。

16730
来自专栏Java技术分享

第四章:Shiro的身份认证(Authentication)——深入浅出学Shiro细粒度权限开发框架

  Authentication 是指身份验证的过程——即证明一个用户实际上是不是他们所说的他们是谁。也就是说通过提交用户的身份和凭证给Shiro,以判断它们是...

22050
来自专栏Java学习之路

Java中的阻塞队列

一丶什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。 1)阻塞插入:当队列满后,队列会阻塞(...

38160
来自专栏赵俊的Java专栏

Shiro授权

授权在 Shiro 中被称为 Authorization,用来验证用户是否具备某个角色。

12520
来自专栏Java技术分享

第四章:Shiro的身份认证(Authentication)——深入浅出学Shiro细粒度权限开发框架

Authentication概述 概述   Authentication 是指身份验证的过程——即证明一个用户实际上是不是他们所说的他们是谁。也就是说通过提交...

28950
来自专栏漫漫深度学习路

pandas基本用法(一)

pandas基本用法 读取csv文件 import pandas food_info = pandas.read_csv(file_name)# 返回一个Dat...

22680
来自专栏码神联盟

Shiro系列 | 《Shiro开发详细教程》第六章:Shiro之Realm高级篇

Realm在之前的章节中,我们已经具体的介绍过,那么接下来,我们来看看正式环境下Realm是如何实现和分配的。

28740

扫码关注云+社区

领取腾讯云代金券