Shiro Odd number of characters.

本文介绍了在集成Shiro过程中遇到的登录失败问题及其解决方案。通过分析发现密码加密配置不一致导致错误,给出了正确的密码加密方法。

这几天在集成Shiro,从网上找了代码,自己参考着写自己的Demo的。

参照着他的代码,mybatis部分没有集成,自己返回的固定数据,执行登录的时候出现以下问题。

Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false].  Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).

java.lang.IllegalArgumentException: Odd number of characters.

网上搜了下,这个问题出现的很多,基本都是说加密这块出了问题。最终还是仔细阅读那位兄弟代码的时候发现有个password加密的部分。而且也提供了相应的加密。

首先,我这里进入Shiro的时候会执行doGetAuthenticationInfo方法,这里会使用hashedCredentialsMatcher对密码进行加密,仔细对比后确定问题就出在这,所以讲自己返回的数据中的密码进行如下加密后测试OK了。

public class PasswordHelper {

    private String algorithmName = "md5";
    private int hashIterations = 2;

    public void encryptPassword(User user) {
        //String salt=randomNumberGenerator.nextBytes().toHex();
        String newPassword = new SimpleHash(algorithmName, user.getPassword(),  ByteSource.Util.bytes(user.getUsername()), hashIterations).toHex();
        //String newPassword = new SimpleHash(algorithmName, user.getPassword()).toHex();
        user.setPassword(newPassword);

    }
    public static void main(String[] args) {
        PasswordHelper passwordHelper = new PasswordHelper();
        User user = new User();
        user.setUsername("admin");
            user.setPassword("admin");
        passwordHelper.encryptPassword(user);
        System.out.println(user);
    }

这里的hashIterations次数要跟hashedCredentialsMatcher方法设置中的次数相同,加密方式也要相同(一般MD5足够了)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值