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 thePasswordService
interface that relies on an internalHashService
,HashFormat
, andHashFormatFactory
to 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 String
DEFAULT_HASH_ALGORITHM
static int
DEFAULT_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.HashRequest
buildHashRequest(org.apache.shiro.util.ByteSource plaintext, org.apache.shiro.crypto.hash.Hash saved)
protected void
checkHashFormatDurability()
protected org.apache.shiro.util.ByteSource
createByteSource(Object o)
protected org.apache.shiro.crypto.hash.HashRequest
createHashRequest(org.apache.shiro.util.ByteSource plaintext)
String
encryptPassword(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.HashFormat
getHashFormat()
org.apache.shiro.crypto.hash.format.HashFormatFactory
getHashFormatFactory()
org.apache.shiro.crypto.hash.HashService
getHashService()
org.apache.shiro.crypto.hash.Hash
hashPassword(Object plaintext)
Hashes the specified plaintext password using internal hashing configuration settings pertinent to password hashing.boolean
passwordsMatch(Object submittedPlaintext, String saved)
Returnstrue
if thesubmittedPlaintext
password matches the existingsaved
password,false
otherwise.boolean
passwordsMatch(Object plaintext, org.apache.shiro.crypto.hash.Hash saved)
Returnstrue
if thesubmittedPlaintext
password matches the existingsavedPasswordHash
,false
otherwise.void
setHashFormat(org.apache.shiro.crypto.hash.format.HashFormat hashFormat)
void
setHashFormatFactory(org.apache.shiro.crypto.hash.format.HashFormatFactory hashFormatFactory)
void
setHashService(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:PasswordService
Converts 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 resultingencryptedValue
should 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:
encryptPassword
in 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:HashingPasswordService
Hashes 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 returnedHash
object in a custom manner. Most applications will find theencryptPassword
method 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 aByteSource
by 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:
hashPassword
in 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:HashingPasswordService
Returnstrue
if thesubmittedPlaintext
password matches the existingsavedPasswordHash
,false
otherwise. 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
ThesubmittedPlaintext
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.- Specified by:
passwordsMatch
in 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 thehashPassword
method (typically when the account is created or the account's password is reset).- Returns:
true
if theplaintext
password matches the existingsavedPasswordHash
,false
otherwise.
-
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:PasswordService
Returnstrue
if thesubmittedPlaintext
password matches the existingsaved
password,false
otherwise.Usage
ThesubmittedPlaintext
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 submittedPassword = ... passwordService.passwordsMatch(submittedPassword, encryptedPassword);
or similarly:char[] submittedPasswordCharacters = ... passwordService.passwordsMatch(submittedPasswordCharacters, encryptedPassword);
- Specified by:
passwordsMatch
in 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 theencryptPassword
method (typically when the account is created or the account's password is reset).- Returns:
true
if thesubmittedPlaintext
password matches the existingsaved
password,false
otherwise.- 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)
-
-