Package org.apache.shiro.subject
Class SimplePrincipalMap
- java.lang.Object
-
- org.apache.shiro.subject.SimplePrincipalMap
-
- All Implemented Interfaces:
Serializable
,Iterable
,Map<String,Object>
,PrincipalCollection
,PrincipalMap
public class SimplePrincipalMap extends Object implements PrincipalMap
Default implementation of thePrincipalMap
interface. *EXPERIMENTAL for Shiro 1.2 - DO NOT USE YET*- Since:
- 1.2
- Author:
- Les Hazlewood
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description SimplePrincipalMap()
SimplePrincipalMap(Map<String,Map<String,Object>> backingMap)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description List
asList()
Returns a single Subject's principals retrieved from all configured Realms as a List, or an empty List if there are not any principals.Set
asSet()
Returns a single Subject's principals retrieved from all configured Realms as a Set, or an empty Set if there are not any principals.<T> Collection<T>
byType(Class<T> type)
Returns all principals assignable from the specified type, or an empty Collection if no principals of that type are contained.void
clear()
boolean
containsKey(Object o)
boolean
containsValue(Object o)
protected Map<String,Object>
ensureCombinedPrincipals()
Set<Map.Entry<String,Object>>
entrySet()
Collection
fromRealm(String realmName)
Returns a single Subject's principals retrieved from the specified Realm only as a Collection, or an empty Collection if there are not any principals from that realm.Object
get(Object o)
Object
getPrimaryPrincipal()
Returns the primary principal used application-wide to uniquely identify the owning account/Subject.Set<String>
getRealmNames()
Returns the realm names that this collection has principals for.Object
getRealmPrincipal(String realmName, String principalName)
Map<String,Object>
getRealmPrincipals(String name)
boolean
isEmpty()
Returnstrue
if this collection is empty,false
otherwise.Iterator
iterator()
Set<String>
keySet()
<T> T
oneByType(Class<T> type)
Returns the first discovered principal assignable from the specified type, ornull
if there are none of the specified type.Object
put(String s, Object o)
void
putAll(Map<? extends String,?> map)
Object
remove(Object o)
Object
removeRealmPrincipal(String realmName, String principalName)
Object
setRealmPrincipal(String realmName, String principalName, Object principal)
Map<String,Object>
setRealmPrincipals(String realmName, Map<String,Object> principals)
int
size()
Collection<Object>
values()
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Methods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, equals, forEach, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace, replaceAll
-
-
-
-
Method Detail
-
containsKey
public boolean containsKey(Object o)
- Specified by:
containsKey
in interfaceMap<String,Object>
-
containsValue
public boolean containsValue(Object o)
- Specified by:
containsValue
in interfaceMap<String,Object>
-
getPrimaryPrincipal
public Object getPrimaryPrincipal()
Description copied from interface:PrincipalCollection
Returns the primary principal used application-wide to uniquely identify the owning account/Subject. The value is usually always a uniquely identifying attribute specific to the data source that retrieved the account data. Some examples:- a
UUID
- a
long
value such as a surrogate primary key in a relational database - an LDAP UUID or static DN
- a String username unique across all user accounts
Multi-Realm Applications
In a single-Realm
application, typically there is only ever one unique principal to retain and that is the value returned from this method. However, in a multi-Realm
application, where thePrincipalCollection
might retain principals across more than one realm, the value returned from this method should be the single principal that uniquely identifies the subject for the entire application. That value is of course application specific, but most applications will typically choose one of the primary principals from one of theRealm
s. Shiro's default implementations of this interface make this assumption by usually simply returningIterable.iterator()
.next()
, which just returns the first returned principal obtained from the first consulted/configuredRealm
during the authentication attempt. This means in a multi-Realm
application,Realm
configuration order matters if you want to retain this default heuristic. If this heuristic is not sufficient, most Shiro end-users will need to implement a customAuthenticationStrategy
. AnAuthenticationStrategy
has exact control over thePrincipalCollection
returned at the end of an authentication attempt via theAuthenticationStrategy#
implementation.afterAllAttempts
- Specified by:
getPrimaryPrincipal
in interfacePrincipalCollection
- Returns:
- the primary principal used to uniquely identify the owning account/Subject
- a
-
oneByType
public <T> T oneByType(Class<T> type)
Description copied from interface:PrincipalCollection
Returns the first discovered principal assignable from the specified type, ornull
if there are none of the specified type. Note that this will returnnull
if the 'owning' subject has not yet logged in.- Specified by:
oneByType
in interfacePrincipalCollection
- Parameters:
type
- the type of the principal that should be returned.- Returns:
- a principal of the specified type or
null
if there isn't one of the specified type.
-
byType
public <T> Collection<T> byType(Class<T> type)
Description copied from interface:PrincipalCollection
Returns all principals assignable from the specified type, or an empty Collection if no principals of that type are contained. Note that this will return an empty Collection if the 'owning' subject has not yet logged in.- Specified by:
byType
in interfacePrincipalCollection
- Parameters:
type
- the type of the principals that should be returned.- Returns:
- a Collection of principals that are assignable from the specified type, or an empty Collection if no principals of this type are associated.
-
asList
public List asList()
Description copied from interface:PrincipalCollection
Returns a single Subject's principals retrieved from all configured Realms as a List, or an empty List if there are not any principals. Note that this will return an empty List if the 'owning' subject has not yet logged in.- Specified by:
asList
in interfacePrincipalCollection
- Returns:
- a single Subject's principals retrieved from all configured Realms as a List.
-
asSet
public Set asSet()
Description copied from interface:PrincipalCollection
Returns a single Subject's principals retrieved from all configured Realms as a Set, or an empty Set if there are not any principals. Note that this will return an empty Set if the 'owning' subject has not yet logged in.- Specified by:
asSet
in interfacePrincipalCollection
- Returns:
- a single Subject's principals retrieved from all configured Realms as a Set.
-
fromRealm
public Collection fromRealm(String realmName)
Description copied from interface:PrincipalCollection
Returns a single Subject's principals retrieved from the specified Realm only as a Collection, or an empty Collection if there are not any principals from that realm. Note that this will return an empty Collection if the 'owning' subject has not yet logged in.- Specified by:
fromRealm
in interfacePrincipalCollection
- Parameters:
realmName
- the name of the Realm from which the principals were retrieved.- Returns:
- the Subject's principals from the specified Realm only as a Collection or an empty Collection if there are not any principals from that realm.
-
getRealmNames
public Set<String> getRealmNames()
Description copied from interface:PrincipalCollection
Returns the realm names that this collection has principals for.- Specified by:
getRealmNames
in interfacePrincipalCollection
- Returns:
- the names of realms that this collection has one or more principals for.
-
isEmpty
public boolean isEmpty()
Description copied from interface:PrincipalCollection
Returnstrue
if this collection is empty,false
otherwise.
-
getRealmPrincipals
public Map<String,Object> getRealmPrincipals(String name)
- Specified by:
getRealmPrincipals
in interfacePrincipalMap
-
setRealmPrincipals
public Map<String,Object> setRealmPrincipals(String realmName, Map<String,Object> principals)
- Specified by:
setRealmPrincipals
in interfacePrincipalMap
-
setRealmPrincipal
public Object setRealmPrincipal(String realmName, String principalName, Object principal)
- Specified by:
setRealmPrincipal
in interfacePrincipalMap
-
getRealmPrincipal
public Object getRealmPrincipal(String realmName, String principalName)
- Specified by:
getRealmPrincipal
in interfacePrincipalMap
-
removeRealmPrincipal
public Object removeRealmPrincipal(String realmName, String principalName)
- Specified by:
removeRealmPrincipal
in interfacePrincipalMap
-
-