Shiro CredentialsMatcher proporciona una interfaz para el cifrado de la contraseña y la contraseña de verificación de los servicios, pero es CredentialsMatcher HashedCredentialsMatcher una clase de implementación. Redacción del proyecto, utilizará el cifrado asimétrico es siempre la contraseña del usuario, la corriente actual de cifrado asimétrico es SHA, sal y procesada en el SHA, y HashedCredentialsMatcher también nos permite especificar sus propios algoritmos y sal.
ShiroConfig perfil:
@Bean público HashedCredentialsMatcher hashedCredentialsMatcher () { HashedCredentialsMatcher hashedCredentialsMatcher = nuevo nuevo HashedCredentialsMatcher (); // cifrado hashedCredentialsMatcher.setHashAlgorithmName ( "el SHA-512" ); // Número cifrados hashedCredentialsMatcher.setHashIterations (2 ); // almacenado contraseña hash para un hexadecimal // hashedCredentialsMatcher.isStoredCredentialsHexEncoded (); retorno hashedCredentialsMatcher; }
ShiroRealm:
@ Override protegida AuthenticationInfo doGetAuthenticationInfo (AuthenticationToken token) tiros de AuthenticationException { System.out.println ( "================= realizar la lógica de autenticación =========== ======== " ); // juicio Shiro escritura lógica para determinar el nombre de usuario y contraseña // consulta de la base de datos para el nombre de usuario y contraseña // obtener pase controlador sobre el token UsernamePasswordToken tokens = (UsernamePasswordToken) contador; el usuario usuario = userService.selectByUsername (tokens.getUsername ()); IF (User == nula ) { de banda nueva nueva UnknownAccountException (); //¿No ha encontrado la cuenta } SI (user.getIsValid () == 0 ) { de banda nueva nueva LockedAccountException (); // cuenta no válido } // esto se comprueba automáticamente por el HashedCredentialsMatcher configuración de retorno nueva nueva SimpleAuthenticationInfo (Usuario, user.getPassword () , ByteSource.Util.bytes (user.getSalt ()), getName ()); // parámetros son:
ShiroUtils generación de criptografía asimétrica:
Importación org.apache.commons.lang3.RandomStringUtils; Importación org.apache.shiro.crypto.hash.SimpleHash; público de clase ShiroUtils { / ** * PWD_SALT_LENGTH: Sal valor cifrado longitud de la contraseña * / pública estática final int . PWD_SALT_LENGTH = 6 ; / ** * PWD_ALGORITHM_NAME: algoritmos de cifrado de la contraseña * / pública estática final cadena PWD_ALGORITHM_NAME = "el SHA-512" ; / ** * PWD_ALGORITHM_NAME: número de cifrado de la contraseña * / público estáticas finales int PWD_HASH_ITERATIONS = 2 ; / ** *生成密码<br/> * * @ param PWD * @param sal * @return * / pública estática Cadena generatePwdEncrypt (String PWD, sal String) { SimpleHash de hash = nueva SimpleHash (PWD_ALGORITHM_NAME, pwd, sal, PWD_HASH_ITERATIONS); volver hash.toString (); } / ** *生成盐值<br/> * * @return * / pública estática Cadena generateSalt () { retorno RandomStringUtils.randomAlphabetic (PWD_SALT_LENGTH); } Pública estáticas vacíos principales (args String []) { Cadena generateSalt = generateSalt (); Cadena generatePwdEncrypt = generatePwdEncrypt ( "123456" , generateSalt); System.out.println (generateSalt); System.out.println (generatePwdEncrypt); } }