史郎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)。 } }