Class DefaultPasswordService
- java.lang.Object
-
- org.apache.shiro.authc.credential.DefaultPasswordService
-
- All Implemented Interfaces:
HashingPasswordService,PasswordService
public class DefaultPasswordService extends Object implements HashingPasswordService
Default implementation of thePasswordServiceinterface that relies on an internalHashService,HashFormat, andHashFormatFactoryto function:Hashing Passwords
Comparing Passwords
All hashing operations are performed by the internalhashService. After the hash is computed, it is formatted into a String value via the internalhashFormat.- Since:
- 1.2
-
-
Field Summary
Fields Modifier and Type Field Description static StringDEFAULT_HASH_ALGORITHMstatic intDEFAULT_HASH_ITERATIONS
-
Constructor Summary
Constructors Constructor Description DefaultPasswordService()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected org.apache.shiro.crypto.hash.HashRequestbuildHashRequest(org.apache.shiro.util.ByteSource plaintext, org.apache.shiro.crypto.hash.Hash saved)protected voidcheckHashFormatDurability()protected org.apache.shiro.util.ByteSourcecreateByteSource(Object o)protected org.apache.shiro.crypto.hash.HashRequestcreateHashRequest(org.apache.shiro.util.ByteSource plaintext)StringencryptPassword(Object plaintext)Converts the specified plaintext password (usually acquired from your application's 'new user' or 'password reset' workflow) into a formatted string safe for storage.org.apache.shiro.crypto.hash.format.HashFormatgetHashFormat()org.apache.shiro.crypto.hash.format.HashFormatFactorygetHashFormatFactory()org.apache.shiro.crypto.hash.HashServicegetHashService()org.apache.shiro.crypto.hash.HashhashPassword(Object plaintext)Hashes the specified plaintext password using internal hashing configuration settings pertinent to password hashing.booleanpasswordsMatch(Object submittedPlaintext, String saved)Returnstrueif thesubmittedPlaintextpassword matches the existingsavedpassword,falseotherwise.booleanpasswordsMatch(Object plaintext, org.apache.shiro.crypto.hash.Hash saved)Returnstrueif thesubmittedPlaintextpassword matches the existingsavedPasswordHash,falseotherwise.voidsetHashFormat(org.apache.shiro.crypto.hash.format.HashFormat hashFormat)voidsetHashFormatFactory(org.apache.shiro.crypto.hash.format.HashFormatFactory hashFormatFactory)voidsetHashService(org.apache.shiro.crypto.hash.HashService hashService)
-
-
-
Field Detail
-
DEFAULT_HASH_ALGORITHM
public static final String DEFAULT_HASH_ALGORITHM
- See Also:
- Constant Field Values
-
DEFAULT_HASH_ITERATIONS
public static final int DEFAULT_HASH_ITERATIONS
- See Also:
- Constant Field Values
-
-
Method Detail
-
encryptPassword
public String encryptPassword(Object plaintext)
Description copied from interface:PasswordServiceConverts the specified plaintext password (usually acquired from your application's 'new user' or 'password reset' workflow) into a formatted string safe for storage. The returned string can be safely saved with the corresponding user account record (e.g. as a 'password' attribute). It is expected that the String returned from this method will be presented to thepasswordsMatch(plaintext,encrypted)method when performing a password comparison check.Usage
The input argument type can be any 'byte backed'Object- almost always either a String or character array representing passwords (character arrays are often a safer way to represent passwords as they can be cleared/nulled-out after use. Any argument type supported byByteSource.Util.isCompatible(Object)is valid. For example:String rawPassword = ... String encryptedValue = passwordService.encryptPassword(rawPassword);
or, identically:char[] rawPasswordChars = ... String encryptedValue = passwordService.encryptPassword(rawPasswordChars);
The resultingencryptedValueshould be stored with the account to be retrieved later during a login attempt. For example:String encryptedValue = passwordService.encryptPassword(rawPassword); ... userAccount.setPassword(encryptedValue); userAccount.save(); //create or update to your data store
- Specified by:
encryptPasswordin interfacePasswordService- Parameters:
plaintext- the raw password as 'byte-backed' object (String, character array,ByteSource, etc) usually acquired from your application's 'new user' or 'password reset' workflow.- Returns:
- the encrypted password, formatted for storage.
- See Also:
ByteSource.Util.isCompatible(Object)
-
hashPassword
public org.apache.shiro.crypto.hash.Hash hashPassword(Object plaintext)
Description copied from interface:HashingPasswordServiceHashes the specified plaintext password using internal hashing configuration settings pertinent to password hashing. Note that this method is only likely to be used in more complex environments that wish to format and/or save the returnedHashobject in a custom manner. Most applications will find theencryptPasswordmethod suitable enough for safety and ease-of-use.Usage
The input argument type can be any 'byte backed'Object- almost always either a String or character array representing passwords (character arrays are often a safer way to represent passwords as they can be cleared/nulled-out after use. Any argument type supported byByteSource.Util.isCompatible(Object)is valid. Regardless of your choice of using Strings or character arrays to represent submitted passwords, you can wrap either as aByteSourceby usingByteSource.Util, for example, when the passwords are captured as Strings:ByteSource passwordBytes = ByteSource.Util.bytes(submittedPasswordString); Hash hashedPassword = hashingPasswordService.hashPassword(passwordBytes);
or, identically, when captured as a character array:ByteSource passwordBytes = ByteSource.Util.bytes(submittedPasswordCharacterArray); Hash hashedPassword = hashingPasswordService.hashPassword(passwordBytes);
- Specified by:
hashPasswordin interfaceHashingPasswordService- Parameters:
plaintext- the raw password as 'byte-backed' object (String, character array,ByteSource, etc) usually acquired from your application's 'new user' or 'password reset' workflow.- Returns:
- the hashed password.
- See Also:
ByteSource.Util.isCompatible(Object),PasswordService.encryptPassword(Object)
-
passwordsMatch
public boolean passwordsMatch(Object plaintext, org.apache.shiro.crypto.hash.Hash saved)
Description copied from interface:HashingPasswordServiceReturnstrueif thesubmittedPlaintextpassword matches the existingsavedPasswordHash,falseotherwise. Note that this method is only likely to be used in more complex environments that save hashes in a custom manner. Most applications will find thepasswordsMatch(plaintext,string)method sufficient ifencrypting passwords as Strings.Usage
ThesubmittedPlaintextargument type can be any 'byte backed'Object- almost always either a String or character array representing passwords (character arrays are often a safer way to represent passwords as they can be cleared/nulled-out after use. Any argument type supported byByteSource.Util.isCompatible(Object)is valid.- Specified by:
passwordsMatchin interfaceHashingPasswordService- Parameters:
plaintext- a raw/plaintext password submitted by an end user/Subject.saved- the previously hashed password known to be associated with an account. This value is expected to have been previously generated from thehashPasswordmethod (typically when the account is created or the account's password is reset).- Returns:
trueif theplaintextpassword matches the existingsavedPasswordHash,falseotherwise.
-
checkHashFormatDurability
protected void checkHashFormatDurability()
-
createHashRequest
protected org.apache.shiro.crypto.hash.HashRequest createHashRequest(org.apache.shiro.util.ByteSource plaintext)
-
createByteSource
protected org.apache.shiro.util.ByteSource createByteSource(Object o)
-
passwordsMatch
public boolean passwordsMatch(Object submittedPlaintext, String saved)
Description copied from interface:PasswordServiceReturnstrueif thesubmittedPlaintextpassword matches the existingsavedpassword,falseotherwise.Usage
ThesubmittedPlaintextargument type can be any 'byte backed'Object- almost always either a String or character array representing passwords (character arrays are often a safer way to represent passwords as they can be cleared/nulled-out after use. Any argument type supported byByteSource.Util.isCompatible(Object)is valid. For example:String submittedPassword = ... passwordService.passwordsMatch(submittedPassword, encryptedPassword);
or similarly:char[] submittedPasswordCharacters = ... passwordService.passwordsMatch(submittedPasswordCharacters, encryptedPassword);
- Specified by:
passwordsMatchin interfacePasswordService- Parameters:
submittedPlaintext- a raw/plaintext password submitted by an end user/Subject.saved- the previously encrypted password known to be associated with an account. This value is expected to have been previously generated from theencryptPasswordmethod (typically when the account is created or the account's password is reset).- Returns:
trueif thesubmittedPlaintextpassword matches the existingsavedpassword,falseotherwise.- See Also:
ByteSource.Util.isCompatible(Object)
-
buildHashRequest
protected org.apache.shiro.crypto.hash.HashRequest buildHashRequest(org.apache.shiro.util.ByteSource plaintext, org.apache.shiro.crypto.hash.Hash saved)
-
getHashService
public org.apache.shiro.crypto.hash.HashService getHashService()
-
setHashService
public void setHashService(org.apache.shiro.crypto.hash.HashService hashService)
-
getHashFormat
public org.apache.shiro.crypto.hash.format.HashFormat getHashFormat()
-
setHashFormat
public void setHashFormat(org.apache.shiro.crypto.hash.format.HashFormat hashFormat)
-
getHashFormatFactory
public org.apache.shiro.crypto.hash.format.HashFormatFactory getHashFormatFactory()
-
setHashFormatFactory
public void setHashFormatFactory(org.apache.shiro.crypto.hash.format.HashFormatFactory hashFormatFactory)
-
-