shiro:HashedCredentialsMatcher认证匹配

shiro:HashedCredentialsMatcher认证匹配

1、HashedCredentialsMatcher类的介绍

shiro提供了用于加密密码和验证密码服务的CredentialsMatcher 接口,而 HashedCredentialsMatcher 正是 CredentialsMatcher 的一个实现类写项目的话,总归会用到用户密码的非对称加密,目前主流的非对称加密方式是 MD5 ,以及在 MD5 上的加盐处理,而 HashedCredentialsMatcher 也允许我们指定自己的算法和盐

2、HashedCredentialsMatcher 的使用

1.建立 ShiroConfiguration 配置类,除了 shiro 的通常配置之外,需加上:

    @Bean
    public HashedCredentialsMatcher hashedCredentialsMatcher(){
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
      	//加密方式
        hashedCredentialsMatcher.setHashAlgorithmName("md5");
      	//加密次数
        hashedCredentialsMatcher.setHashIterations(2);
      	//存储散列后的密码是否为16进制
      	hashedCredentialsMatcher.isStoredCredentialsHexEncoded(true);
        return hashedCredentialsMatcher;
    }

2.XML 格式

<bean id="credentialsMatcher"
        class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
  		<!-- 加密方式 -->
        <property name="hashAlgorithmName" value="MD5" />
  		<!-- 加密次数 -->
        <property name="hashIterations" value="2" />
  		<!-- 存储散列后的密码是否为16进制 -->
        <property name="storedCredentialsHexEncoded" value="true" />
</bean>

3.ini 等配置文件

首先在 web.xml 中自定义 shiro.ini 位置

<filter>
    <filter-name>ShiroFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
    <init-param>
        <param-name>configPath</param-name>
        <param-value>/WEB-INF/shiro.ini</param-value>
    </init-param>
</filter>

然后除了 shiro 的通常配置之外,需加上:

credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
## 加密方式
credentialsMatcher.hashAlgorithmName=md5
## 加密次数
credentialsMatcher.hashIterations=2
## 存储散列后的密码是否为16进制 
credentialsMatcher.storedCredentialsHexEncoded=true

3、HashedCredentialsMatcher 的源码分析

从开发者的角度来看,我们可以自己实现 CredentialsMatcher 的一个类来实现定制化的账户密码验证机制,例如

public class MyCredentialsMatcher extends SimpleCredentialsMatcher {
    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
          Object tokenCredentials = getCredentials(token);
        Object accountCredentials = getCredentials(info);
        return super.equals(tokenCredentials, accountCredentials);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值