HashedCredentialsMatcher史郎のspringboot統合

史郎CredentialsMatcherは、パスワードの暗号化とパスワード認証サービスのためのインタフェースを提供しますが、実装クラスCredentialsMatcher HashedCredentialsMatcherです。プロジェクトを書く、それは非対称暗号化を使用する非対称暗号化の現在の主流は、SHA、塩およびSHA上で処理され、そしてHashedCredentialsMatcherはまた、独自のアルゴリズムと塩を指定するために私達を許可する、常にユーザーのパスワードです。

ShiroConfigプロフィール:

@Bean
     公共HashedCredentialsMatcher hashedCredentialsMatcher(){ 
        HashedCredentialsMatcher hashedCredentialsMatcher = 新しい新しいHashedCredentialsMatcher();
         // 暗号 
        hashedCredentialsMatcher.setHashAlgorithmName( "SHA-512" );
         // 暗号化された数 
        hashedCredentialsMatcher.setHashIterations(2 );
         // パスワード記憶されたハッシュ進用
         // ; hashedCredentialsMatcher.isStoredCredentialsHexEncoded()
        戻りhashedCredentialsMatcher; 
    }

 

ShiroRealm:

@Overrideは
     保護 AuthenticationInfo doGetAuthenticationInfoを(AuthenticationTokenトークン)スロー含むAuthenticationException {で
        のSystem.out.println(「=================認証ロジックを実行=========== ======== " );
         // ユーザ名とパスワードを決定するために、書き込み史郎判定ロジック
         // データベースからユーザー名とパスワードにクエリー

        // トークンを超えるコントローラのパスを取得 
        UsernamePasswordTokenトークン= (UsernamePasswordToken)トークンを、
        ユーザーユーザー = userService.selectByUsername(tokens.getUsername()); 

        IF(ユーザー== nullの){
             スロー 新しい新 UnknownAccountException(); //アカウントを見つけられませんでした   
        } 
        
        IF(user.getIsValid()== 0 ){
             スロー 新しい新しい LockedAccountExceptionを(); // 無効なアカウント
        } 
        
        // これは自動的に設定HashedCredentialsMatcherのでチェックされ
        、戻り 、新たな新SimpleAuthenticationInfo(ユーザー、user.getPassword() 、
                ByteSource.Util.bytes(user.getSalt())のgetName()); // パラメータは次のとおりです。
                                                                                                                      

 

非対称暗号を生成ShiroUtils:

インポートorg.apache.commons.lang3.RandomStringUtils;
 インポートorg.apache.shiro.crypto.hash.SimpleHash; 

パブリック クラスShiroUtils {
     / ** 
     * PWD_SALT_LENGTH:salt値暗号化されたパスワードの長さ
     * / 
    パブリック 静的 最終 int型。PWD_SALT_LENGTH = 6 ;
     / ** 
     * PWD_ALGORITHM_NAME:パスワード暗号化アルゴリズム
     * / 
    パブリック 静的な 最終文字列PWD_ALGORITHM_NAME = "SHA-512" ; 

    / ** 
     * PWD_ALGORITHM_NAME:パスワードの暗号化番号
     * / 
    パブリック 静的 最終 int型の PWD_HASH_ITERATIONS = 2 ; 

    / **
     *生成密码<BR/> 
     * 
     * @param PWD 
     * @paramの
     * @return 
     * / 
    パブリック 静的文字列generatePwdEncrypt(文字列が文字列塩、PWD){ 
        SimpleHashハッシュ =
                 新しいSimpleHash(PWD_ALGORITHM_NAME、PWD、塩、PWD_HASH_ITERATIONS)。
        リターンhash.toString(); 
    } 

    / ** 
     *生成盐值<BR/> 
     * 
     * @return 
     * / 
    パブリック 静的文字列generateSalt(){
         リターンRandomStringUtils.randomAlphabetic(PWD_SALT_LENGTH)。
    } 
    
    
    パブリック 静的 ボイドメイン(文字列[]引数){ 
        文字列generateSalt = generateSalt()。
        ストリングgeneratePwdEncrypt = generatePwdEncrypt( "123456" 、generateSalt)。
        System.out.println(generateSalt)。
        System.out.println(generatePwdEncrypt)。
        
    } 
    
}

 

おすすめ

転載: www.cnblogs.com/chong-zuo3322/p/12447729.html