Package org.wildfly.security.auth.realm
Class FileSystemSecurityRealm
- java.lang.Object
-
- org.wildfly.security.auth.realm.FileSystemSecurityRealm
-
- All Implemented Interfaces:
CacheableSecurityRealm,ModifiableSecurityRealm,SecurityRealm
public final class FileSystemSecurityRealm extends Object implements ModifiableSecurityRealm, CacheableSecurityRealm
A simple filesystem-backed security realm.- Author:
- David M. Lloyd
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classFileSystemSecurityRealm.AutoCloseableXMLStreamReaderHolder(package private) static classFileSystemSecurityRealm.AutoCloseableXMLStreamWriterHolder(package private) static interfaceFileSystemSecurityRealm.CredentialParseFunction(package private) static classFileSystemSecurityRealm.Identitystatic classFileSystemSecurityRealm.IntegrityResultprotected static classFileSystemSecurityRealm.LoadedIdentityprivate static classFileSystemSecurityRealm.Version
-
Field Summary
Fields Modifier and Type Field Description (package private) static ElytronPermissionCREATE_SECURITY_REALMprivate booleanencodedprivate CharsethashCharsetprivate EncodinghashEncoding(package private) static Map<String,FileSystemSecurityRealm.Version>KNOWN_NAMESPACESprivate intlevelsprivate NameRewriternameRewriterprivate PrivateKeyprivateKeyprivate Supplier<Provider[]>providersprivate PublicKeypublicKeyprivate ConcurrentHashMap<String,IdentitySharedExclusiveLock>realmIdentityLocksprivate Pathrootprivate SecretKeysecretKey-
Fields inherited from interface org.wildfly.security.auth.server.SecurityRealm
EMPTY_REALM
-
-
Constructor Summary
Constructors Constructor Description FileSystemSecurityRealm(Path root)Construct a new instance with 2 levels of hashing.FileSystemSecurityRealm(Path root, int levels)Construct a new instance.FileSystemSecurityRealm(Path root, int levels, Supplier<Provider[]> providers)FileSystemSecurityRealm(Path root, int levels, Encoding hashEncoding, Charset hashCharset)Construct a new instance.FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels)Construct a new instance.FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded)Construct a new instance.FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded, Encoding hashEncoding, Charset hashCharset)Construct a new instance.FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded, Encoding hashEncoding, Charset hashCharset, Supplier<Provider[]> providers, SecretKey secretKey, PrivateKey privateKey, PublicKey publicKey)Construct a new instance.FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded, Encoding hashEncoding, Charset hashCharset, SecretKey secretKey)Construct a new instance.FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, Encoding hashEncoding, Charset hashCharset)Construct a new instance.FileSystemSecurityRealm(Path root, Encoding hashEncoding, Charset hashCharset)Construct a new instance with 2 levels of hashing.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static FileSystemSecurityRealmBuilderbuilder()Construct a new instance of the FileSystemSecurityRealmBuilder.SupportLevelgetCredentialAcquireSupport(Class<? extends Credential> credentialType, String algorithmName, AlgorithmParameterSpec parameterSpec)Determine whether a credential of the given type and algorithm is definitely obtainable, possibly obtainable (for] some identities), or definitely not obtainable.SupportLevelgetEvidenceVerifySupport(Class<? extends Evidence> evidenceType, String algorithmName)Determine whether a given type of evidence is definitely verifiable, possibly verifiable (for some identities), or definitely not verifiable.CharsetgetHashCharset()private ModifiableRealmIdentitygetRealmIdentity(String name, boolean exclusive)RealmIdentitygetRealmIdentity(Principal principal)Get a handle for to the identity for the given principal in the context of this security realm.ModifiableRealmIdentitygetRealmIdentityForUpdate(Principal principal)Get an update handle for to the identity for the given principal in the context of this security realm.ModifiableRealmIdentityIteratorgetRealmIdentityIterator()Get an iterator over all of this realm's identities.private IdentitySharedExclusiveLockgetRealmIdentityLockForName(String name)booleanhasIntegrityEnabled()Checks if the FileSystemSecurityRealm has Integrity checking enabledprivate StringnameFor(Path path)private PathpathFor(String name)voidregisterIdentityChangeListener(Consumer<Principal> listener)Register a listener that should be invoked by this realm in order to notify the caching layer about changes to a specific identity.private ModifiableRealmIdentityIteratorsubIterator(Path root, int levels)voidupdateRealmKeyPair()Re-generate the signatures for all the identities in this realm.FileSystemSecurityRealm.IntegrityResultverifyRealmIntegrity()Verify the integrity of each identity file in this realm.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.wildfly.security.auth.server.ModifiableSecurityRealm
getRealmIdentityForUpdate
-
Methods inherited from interface org.wildfly.security.auth.server.SecurityRealm
getCredentialAcquireSupport, getRealmIdentity, getRealmIdentity, handleRealmEvent
-
-
-
-
Field Detail
-
CREATE_SECURITY_REALM
static final ElytronPermission CREATE_SECURITY_REALM
-
KNOWN_NAMESPACES
static final Map<String,FileSystemSecurityRealm.Version> KNOWN_NAMESPACES
-
root
private final Path root
-
nameRewriter
private final NameRewriter nameRewriter
-
levels
private final int levels
-
encoded
private final boolean encoded
-
hashCharset
private final Charset hashCharset
-
hashEncoding
private final Encoding hashEncoding
-
secretKey
private final SecretKey secretKey
-
privateKey
private final PrivateKey privateKey
-
publicKey
private final PublicKey publicKey
-
realmIdentityLocks
private final ConcurrentHashMap<String,IdentitySharedExclusiveLock> realmIdentityLocks
-
-
Constructor Detail
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded, Encoding hashEncoding, Charset hashCharset, Supplier<Provider[]> providers, SecretKey secretKey, PrivateKey privateKey, PublicKey publicKey)
Construct a new instance. Construction with enabled security manager requirescreateSecurityRealmElytronPermission.- Parameters:
root- the root path of the identity storenameRewriter- the name rewriter to apply to looked up nameslevels- the number of levels of directory hashing to applyencoded- whether identity names should be BASE32 encoded before using as filename (only applies if the security realm is unencrypted)hashCharset- the character set to use when converting password strings to a byte array. Uses UTF-8 by default.hashEncoding- the string format for the hashed passwords. Uses Base64 by default.providers- The providers suppliersecretKey- the SecretKey used to encrypt and decrypt the security realm (ifnull, the security realm will be unencrypted)privateKey- the PrivateKey used to verify the integrity of the security realm (ifnull, the security realm will not verify integrity)publicKey- the PublicKey used to verify the integrity of the security realm (ifnull, the security realm will not verify integrity)
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded, Encoding hashEncoding, Charset hashCharset, SecretKey secretKey)
Construct a new instance. Construction with enabled security manager requirescreateSecurityRealmElytronPermission.- Parameters:
root- the root path of the identity storenameRewriter- the name rewriter to apply to looked up nameslevels- the number of levels of directory hashing to applyencoded- whether identity names should be BASE32 encoded before using as filenamehashCharset- the character set to use when converting password strings to a byte array. Uses UTF-8 by default.hashEncoding- the string format for the hashed passwords. Uses Base64 by default.secretKey- the SecretKey used to encrypt and decrypt the security realm (ifnull, the security realm will be unencrypted)
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded, Encoding hashEncoding, Charset hashCharset)
Construct a new instance. Construction with enabled security manager requirescreateSecurityRealmElytronPermission.- Parameters:
root- the root path of the identity storenameRewriter- the name rewriter to apply to looked up nameslevels- the number of levels of directory hashing to applyencoded- whether identity names should be BASE32 encoded before using as filenamehashCharset- the character set to use when converting password strings to a byte array. Uses UTF-8 by default.hashEncoding- the string format for the hashed passwords. Uses Base64 by default.
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, boolean encoded)
Construct a new instance. Construction with enabled security manager requirescreateSecurityRealmElytronPermission.- Parameters:
root- the root path of the identity storenameRewriter- the name rewriter to apply to looked up nameslevels- the number of levels of directory hashing to applyencoded- whether identity names should by BASE32 encoded before using as filename
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels)
Construct a new instance.- Parameters:
root- the root path of the identity storenameRewriter- the name rewriter to apply to looked up nameslevels- the number of levels of directory hashing to apply
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, NameRewriter nameRewriter, int levels, Encoding hashEncoding, Charset hashCharset)
Construct a new instance.- Parameters:
root- the root path of the identity storenameRewriter- the name rewriter to apply to looked up nameslevels- the number of levels of directory hashing to applyhashEncoding- the string format for hashed passwords. Uses Base64 by default.hashCharset- the character set to use when converting password strings to a byte array. Uses UTF-8 by default and must not benull.
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, int levels)
Construct a new instance.- Parameters:
root- the root path of the identity storelevels- the number of levels of directory hashing to apply
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, int levels, Encoding hashEncoding, Charset hashCharset)
Construct a new instance.- Parameters:
root- the root path of the identity storelevels- the number of levels of directory hashing to applyhashEncoding- the string format for hashed passwords. Uses Base64 by default.hashCharset- the character set to use when converting password strings to a byte array. Uses UTF-8 by default and must not benull.
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root)
Construct a new instance with 2 levels of hashing.- Parameters:
root- the root path of the identity store
-
FileSystemSecurityRealm
public FileSystemSecurityRealm(Path root, Encoding hashEncoding, Charset hashCharset)
Construct a new instance with 2 levels of hashing.- Parameters:
root- the root path of the identity storehashEncoding- the string format for hashed passwords. Uses Base64 by default.hashCharset- the character set to use when converting password strings to a byte array. Uses UTF-8 by default and must not benull
-
-
Method Detail
-
builder
public static FileSystemSecurityRealmBuilder builder()
Construct a new instance of the FileSystemSecurityRealmBuilder.- Returns:
- the new FileSystemSecurityRealmBuilder instance
-
hasIntegrityEnabled
public boolean hasIntegrityEnabled()
Checks if the FileSystemSecurityRealm has Integrity checking enabled- Returns:
trueif Integrity checking is enabled, andfalseotherwise
-
getHashCharset
public Charset getHashCharset()
-
getRealmIdentity
public RealmIdentity getRealmIdentity(Principal principal)
Description copied from interface:SecurityRealmGet a handle for to the identity for the given principal in the context of this security realm. Any validation / name mapping is an implementation detail for the realm. The identity may or may not exist. The returned handle must be cleaned up by a call toRealmIdentity.dispose().- Specified by:
getRealmIdentityin interfaceSecurityRealm- Parameters:
principal- the principal which identifies the identity within the realm (must not benull)- Returns:
- the
RealmIdentityfor the provided principal (notnull)
-
getRealmIdentityForUpdate
public ModifiableRealmIdentity getRealmIdentityForUpdate(Principal principal)
Description copied from interface:ModifiableSecurityRealmGet an update handle for to the identity for the given principal in the context of this security realm. Any validation / name mapping is an implementation detail for the realm. The identity may or may not exist. The returned handle must be cleaned up by a call toRealmIdentity.dispose(). During the lifespan of aModifiableRealmIdentity, no other updates or authentications may take place for the corresponding realm identity, thus care should be taken to minimize the duration of the identity's lifespan.If there is not enough information to locate an identity compatible with this realm,
ModifiableRealmIdentity.NON_EXISTENTmay be returned.- Specified by:
getRealmIdentityForUpdatein interfaceModifiableSecurityRealm- Parameters:
principal- the principal to use to locate theModifiableRealmIdentityhandle (must not benull)- Returns:
- the
ModifiableRealmIdentityfor the provided information (notnull)
-
registerIdentityChangeListener
public void registerIdentityChangeListener(Consumer<Principal> listener)
Description copied from interface:CacheableSecurityRealmRegister a listener that should be invoked by this realm in order to notify the caching layer about changes to a specific identity.- Specified by:
registerIdentityChangeListenerin interfaceCacheableSecurityRealm- Parameters:
listener- the listener
-
getRealmIdentity
private ModifiableRealmIdentity getRealmIdentity(String name, boolean exclusive)
-
getRealmIdentityIterator
public ModifiableRealmIdentityIterator getRealmIdentityIterator() throws RealmUnavailableException
Description copied from interface:ModifiableSecurityRealmGet an iterator over all of this realm's identities.- Specified by:
getRealmIdentityIteratorin interfaceModifiableSecurityRealm- Returns:
- the identity iterator
- Throws:
RealmUnavailableException- if the realm fails for some reason
-
subIterator
private ModifiableRealmIdentityIterator subIterator(Path root, int levels)
-
getCredentialAcquireSupport
public SupportLevel getCredentialAcquireSupport(Class<? extends Credential> credentialType, String algorithmName, AlgorithmParameterSpec parameterSpec) throws RealmUnavailableException
Description copied from interface:SecurityRealmDetermine whether a credential of the given type and algorithm is definitely obtainable, possibly obtainable (for] some identities), or definitely not obtainable.- Specified by:
getCredentialAcquireSupportin interfaceSecurityRealm- Parameters:
credentialType- the exact credential type (must not benull)algorithmName- the algorithm name, ornullif any algorithm is acceptable or the credential type does not support algorithm namesparameterSpec- the algorithm parameters to match, ornullif any parameters are acceptable or the credential type does not support algorithm parameters- Returns:
- the level of support for this credential
- Throws:
RealmUnavailableException- if the realm is not able to handle requests for any reason
-
getEvidenceVerifySupport
public SupportLevel getEvidenceVerifySupport(Class<? extends Evidence> evidenceType, String algorithmName) throws RealmUnavailableException
Description copied from interface:SecurityRealmDetermine whether a given type of evidence is definitely verifiable, possibly verifiable (for some identities), or definitely not verifiable.- Specified by:
getEvidenceVerifySupportin interfaceSecurityRealm- Parameters:
evidenceType- the type of evidence to be verified (must not benull)algorithmName- the algorithm name, ornullif any algorithm is acceptable or the evidence type does not support algorithm names- Returns:
- the level of support for this evidence type
- Throws:
RealmUnavailableException- if the realm is not able to handle requests for any reason
-
getRealmIdentityLockForName
private IdentitySharedExclusiveLock getRealmIdentityLockForName(String name)
-
updateRealmKeyPair
public void updateRealmKeyPair() throws RealmUnavailableExceptionRe-generate the signatures for all the identities in this realm. This method is intended to be called after updating the key pair used by this realm.- Throws:
RealmUnavailableException- if the realm is not able to handle requests for any reason
-
verifyRealmIntegrity
public FileSystemSecurityRealm.IntegrityResult verifyRealmIntegrity() throws RealmUnavailableException
Verify the integrity of each identity file in this realm.- Returns:
trueif the integrity of all the identity files in the realm is successfully verified andfalseotherwise- Throws:
RealmUnavailableException
-
-