zoukankan      html  css  js  c++  java
  • 【Shiro】Shiro登录验证失败问题

    shiro登录验证一直失败:

    原因:

    在用户注册时,采用如下加密方法:

    /**
     * md5加密工具
     * @param var
     * 要加密的字符串
     * @param iterations
     * 加密次数
     * @return
     */
    public static String encrypt(String var,int iterations){
        return new SimpleHash("md5",var,SALT.getBytes(),iterations).toHex();
    }
    

    在ShiroConfig中:

    @Bean
    public ShiroRealm shiroRealm() {
        ShiroRealm shiroRealm = new ShiroRealm();
        return shiroRealm;
    }
    
    /**
     * 加密
     *
     * @return
     */
    @Bean
    public HashedCredentialsMatcher hashedCredentialsMatcher() {
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
        hashedCredentialsMatcher.setHashAlgorithmName("md5");//散列算法
        hashedCredentialsMatcher.setHashIterations(2);//散列的次数
        return hashedCredentialsMatcher;
    }
    

    因为注册时存入数据库的是经过两次MD5加密的,但是在ShiroRealm中却未指定加密方法,导致UserPasswordToken是以明文存在的,所以需要在shiroRealm()中加上:

    //设置加密方式
    shiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
    

    同时必须保持入库时的加密方法和Shiro登录验证时的加密方法一致,包括加密次数、盐值也要一致。

    修改hashedCredentialsMatcher()如下:

    @Bean
    public HashedCredentialsMatcher hashedCredentialsMatcher() {
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
        hashedCredentialsMatcher.setHashAlgorithmName("md5");//散列算法
        hashedCredentialsMatcher.setHashIterations(2);//散列的次数
        hashedCredentialsMatcher.setStoredCredentialsHexEncoded(true);//转化为16进制(与入库时保持一致)
        return hashedCredentialsMatcher;
    }
    

    (注意:我这里采用固定盐值,实际上应该不同用户不同盐值,一般为用户id+固定字符串,盐值略)

    总结:

    在使用Shiro进行认证时,加密规则要和数据入库时保持一致,包括加密规则,加密次数,盐值,都要一致。

  • 相关阅读:
    devise 异步发邮件
    ubuntutweak for lucid
    960gs blueprint
    Amoeba for mysql 0.31发布(读写分离、负载均衡、Failover、数据切分)
    Google App Servlet容器转型 – 从Tomcat到Jetty
    DBeaver
    用simple from暂不用formtastic
    [SQL Server]ORDER BY的问题
    PHP pathinfo() 函数
    php中使用head进行二进制流输出,让用户下载PDF等附件的方法
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286686.html
Copyright © 2011-2022 走看看