shiro自定義密碼校驗器


shiro自定義密碼校驗器

shiro內置了幾個密碼校驗的類,有 Md5CredentialsMatcher Sha1CredentialsMatcher , 不過從1.1版本開始,都開始使用 HashedCredentialsMatcher 這個類了,通過配置加密規則來校驗

它們都實現了一個接口 CredentialsMatcher ,我這里也實現這個接口,實現一個自己的密碼校驗。

新建MyCredentialsMatcher.java

package cn.ishangit.neucommunity.config;

import cn.ishangit.neucommunity.service.UserService;
import cn.ishangit.neucommunity.util.CommunityUtil;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Objects;

/**
 * @author Chen
 * @Description 自定義shiro密碼比較器
 * @create 2020-01-29 21:21
 */

public class MyCredentialsMatcher implements CredentialsMatcher {

    @Autowired
    private UserService userService;

    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        UsernamePasswordToken utoken=(UsernamePasswordToken) token;
        //獲得用戶輸入的密碼:(可以采用加鹽(salt)的方式去檢驗)
        String inPassword = new String(utoken.getPassword());
        String username = utoken.getUsername();
        //獲得數據庫中的密碼
        String dbPassword = (String) info.getCredentials();
        SimpleAuthenticationInfo saInfo = (SimpleAuthenticationInfo)info;
        String salt = userService.findUserByName(username).getSalt();
        inPassword = CommunityUtil.md5(inPassword+salt);
        //進行密碼的比對
        boolean flag = Objects.equals(inPassword, dbPassword);
        return flag;
    }
}

配置自己的密碼校驗類替換默認的:由於是springboot,我們直接在配置類ShiroConfig里面配置:

	/**
     * 創建DefaultWebSecurityManager
     * @return
     */
    @Bean("securityManager")
    public DefaultWebSecurityManager getDefaultWebSecurityManager(){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        getUserRealm().setCredentialsMatcher(myCredentialsMatcher());
        //關聯UserRealm
        securityManager.setRealm(getUserRealm());
        return securityManager;
    }

    /**
     * 配置加密方式
     * @return
     */
    @Bean
    public MyCredentialsMatcher myCredentialsMatcher() {
        return new MyCredentialsMatcher();
    }

此時我們的密碼校驗類就替換成了我們自己的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM