# Subject

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Summary:[Ctors](https://developer.android.com/reference/javax/security/auth/Subject#pubctors)\|[Methods](https://developer.android.com/reference/javax/security/auth/Subject#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/javax/security/auth/Subject#inhmethods)  

# Subject

`
public

final

class
Subject
`  
`

extends `[Object](https://developer.android.com/reference/java/lang/Object)`


``


implements

`[Serializable](https://developer.android.com/reference/java/io/Serializable)`


`

|---|-----------------------------|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | javax.security.auth.Subject |

<br />

*** ** * ** ***

<br />

A`Subject`represents a grouping of related information for a single entity, such as a person. Such information includes the Subject's identities as well as its security-related attributes (passwords and cryptographic keys, for example).

Subjects may potentially have multiple identities. Each identity is represented as a`Principal`within the`Subject`. Principals simply bind names to a`Subject`. For example, a`Subject`that happens to be a person, Alice, might have two Principals: one which binds "Alice Bar", the name on her driver license, to the`Subject`, and another which binds, "999-99-9999", the number on her student identification card, to the`Subject`. Both Principals refer to the same`Subject`even though each has a different name.

A`Subject`may also own security-related attributes, which are referred to as credentials. Sensitive credentials that require special protection, such as private cryptographic keys, are stored within a private credential`Set`. Credentials intended to be shared, such as public key certificates or Kerberos server tickets are stored within a public credential`Set`. Different permissions are required to access and modify the different credential Sets.

To retrieve all the Principals associated with a`Subject`, invoke the`getPrincipals`method. To retrieve all the public or private credentials belonging to a`Subject`, invoke the`getPublicCredentials`method or`getPrivateCredentials`method, respectively. To modify the returned`Set`of Principals and credentials, use the methods defined in the`Set`class. For example:  

```
      Subject subject;
      Principal principal;
      Object credential;

      // add a Principal and credential to the Subject
      subject.getPrincipals().add(principal);
      subject.getPublicCredentials().add(credential);
 
```

This`Subject`class implements`Serializable`. While the Principals associated with the`Subject`are serialized, the credentials associated with the`Subject`are not. Note that the`java.security.Principal`class does not implement`Serializable`. Therefore all concrete`Principal`implementations associated with Subjects must implement`Serializable`.  
**See also:**

- [Principal](https://developer.android.com/reference/java/security/Principal)
- [DomainCombiner](https://developer.android.com/reference/java/security/DomainCombiner)

## Summary

|                                                                                                                                                                                                                                                                                                        ### Public constructors                                                                                                                                                                                                                                                                                                        ||
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| ` `[Subject](https://developer.android.com/reference/javax/security/auth/Subject#Subject())`() ` Create an instance of a`Subject`with an empty`Set`of Principals and empty Sets of public and private credentials.                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ` `[Subject](https://developer.android.com/reference/javax/security/auth/Subject#Subject(boolean,%20java.util.Set<?%20extends%20java.security.Principal>,%20java.util.Set<?>,%20java.util.Set<?>))`(boolean readOnly, `[Set](https://developer.android.com/reference/java/util/Set)`<? extends `[Principal](https://developer.android.com/reference/java/security/Principal)`> principals, `[Set](https://developer.android.com/reference/java/util/Set)`<?> pubCredentials, `[Set](https://developer.android.com/reference/java/util/Set)`<?> privCredentials) ` Create an instance of a`Subject`with Principals and credentials. |

|                                                                                                                                                                                                                                                                                                                                                                              ### Public methods                                                                                                                                                                                                                                                                                                                                                                              ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` static <T> T`                                                                                                                                                 | ` `[doAs](https://developer.android.com/reference/javax/security/auth/Subject#doAs(javax.security.auth.Subject,%20java.security.PrivilegedExceptionAction<T>))`(`[Subject](https://developer.android.com/reference/javax/security/auth/Subject)` subject, `[PrivilegedExceptionAction](https://developer.android.com/reference/java/security/PrivilegedExceptionAction)`<T> action) ` Perform work as a particular`Subject`.                                                                                                                                                                                |
| ` static <T> T`                                                                                                                                                 | ` `[doAs](https://developer.android.com/reference/javax/security/auth/Subject#doAs(javax.security.auth.Subject,%20java.security.PrivilegedAction<T>))`(`[Subject](https://developer.android.com/reference/javax/security/auth/Subject)` subject, `[PrivilegedAction](https://developer.android.com/reference/java/security/PrivilegedAction)`<T> action) ` Perform work as a particular`Subject`.                                                                                                                                                                                                           |
| ` static <T> T`                                                                                                                                                 | ` `[doAsPrivileged](https://developer.android.com/reference/javax/security/auth/Subject#doAsPrivileged(javax.security.auth.Subject,%20java.security.PrivilegedExceptionAction<T>,%20java.security.AccessControlContext))`(`[Subject](https://developer.android.com/reference/javax/security/auth/Subject)` subject, `[PrivilegedExceptionAction](https://developer.android.com/reference/java/security/PrivilegedExceptionAction)`<T> action, `[AccessControlContext](https://developer.android.com/reference/java/security/AccessControlContext)` acc) ` Perform privileged work as a particular`Subject`. |
| ` static <T> T`                                                                                                                                                 | ` `[doAsPrivileged](https://developer.android.com/reference/javax/security/auth/Subject#doAsPrivileged(javax.security.auth.Subject,%20java.security.PrivilegedAction<T>,%20java.security.AccessControlContext))`(`[Subject](https://developer.android.com/reference/javax/security/auth/Subject)` subject, `[PrivilegedAction](https://developer.android.com/reference/java/security/PrivilegedAction)`<T> action, `[AccessControlContext](https://developer.android.com/reference/java/security/AccessControlContext)` acc) ` Perform privileged work as a particular`Subject`.                            |
| ` boolean`                                                                                                                                                      | ` `[equals](https://developer.android.com/reference/javax/security/auth/Subject#equals(java.lang.Object))`(`[Object](https://developer.android.com/reference/java/lang/Object)` o) ` Compares the specified Object with this`Subject`for equality.                                                                                                                                                                                                                                                                                                                                                          |
| ` `[Set](https://developer.android.com/reference/java/util/Set)`<`[Principal](https://developer.android.com/reference/java/security/Principal)`>`               | ` `[getPrincipals](https://developer.android.com/reference/javax/security/auth/Subject#getPrincipals())`() ` Return the`Set`of Principals associated with this`Subject`.                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ` <T extends `[Principal](https://developer.android.com/reference/java/security/Principal)`> `[Set](https://developer.android.com/reference/java/util/Set)`<T>` | ` `[getPrincipals](https://developer.android.com/reference/javax/security/auth/Subject#getPrincipals(java.lang.Class<T>))`(`[Class](https://developer.android.com/reference/java/lang/Class)`<T> c) ` Return a`Set`of Principals associated with this`Subject`that are instances or subclasses of the specified`Class`.                                                                                                                                                                                                                                                                                     |
| ` <T> `[Set](https://developer.android.com/reference/java/util/Set)`<T>`                                                                                        | ` `[getPrivateCredentials](https://developer.android.com/reference/javax/security/auth/Subject#getPrivateCredentials(java.lang.Class<T>))`(`[Class](https://developer.android.com/reference/java/lang/Class)`<T> c) ` Return a`Set`of private credentials associated with this`Subject`that are instances or subclasses of the specified`Class`.                                                                                                                                                                                                                                                            |
| ` `[Set](https://developer.android.com/reference/java/util/Set)`<`[Object](https://developer.android.com/reference/java/lang/Object)`>`                         | ` `[getPrivateCredentials](https://developer.android.com/reference/javax/security/auth/Subject#getPrivateCredentials())`() ` Return the`Set`of private credentials held by this`Subject`.                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ` `[Set](https://developer.android.com/reference/java/util/Set)`<`[Object](https://developer.android.com/reference/java/lang/Object)`>`                         | ` `[getPublicCredentials](https://developer.android.com/reference/javax/security/auth/Subject#getPublicCredentials())`() ` Return the`Set`of public credentials held by this`Subject`.                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ` <T> `[Set](https://developer.android.com/reference/java/util/Set)`<T>`                                                                                        | ` `[getPublicCredentials](https://developer.android.com/reference/javax/security/auth/Subject#getPublicCredentials(java.lang.Class<T>))`(`[Class](https://developer.android.com/reference/java/lang/Class)`<T> c) ` Return a`Set`of public credentials associated with this`Subject`that are instances or subclasses of the specified`Class`.                                                                                                                                                                                                                                                               |
| ` static `[Subject](https://developer.android.com/reference/javax/security/auth/Subject)                                                                        | ` `[getSubject](https://developer.android.com/reference/javax/security/auth/Subject#getSubject(java.security.AccessControlContext))`(`[AccessControlContext](https://developer.android.com/reference/java/security/AccessControlContext)` acc) ` Get the`Subject`associated with the provided`AccessControlContext`.                                                                                                                                                                                                                                                                                        |
| ` int`                                                                                                                                                          | ` `[hashCode](https://developer.android.com/reference/javax/security/auth/Subject#hashCode())`() ` Returns a hashcode for this`Subject`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ` boolean`                                                                                                                                                      | ` `[isReadOnly](https://developer.android.com/reference/javax/security/auth/Subject#isReadOnly())`() ` Query whether this`Subject`is read-only.                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ` void`                                                                                                                                                         | ` `[setReadOnly](https://developer.android.com/reference/javax/security/auth/Subject#setReadOnly())`() ` Set this`Subject`to be read-only.                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ` `[String](https://developer.android.com/reference/java/lang/String)                                                                                           | ` `[toString](https://developer.android.com/reference/javax/security/auth/Subject#toString())`() ` Return the String representation of this`Subject`.                                                                                                                                                                                                                                                                                                                                                                                                                                                       |

| ### Inherited methods |
|-----------------------|---|
| From class` `[java.lang.Object](https://developer.android.com/reference/java/lang/Object)` ` |--------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` `[Object](https://developer.android.com/reference/java/lang/Object)          | ` `[clone](https://developer.android.com/reference/java/lang/Object#clone())`() ` Creates and returns a copy of this object.                                                                                                                                                      | | ` boolean`                                                                     | ` `[equals](https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object))`(`[Object](https://developer.android.com/reference/java/lang/Object)` obj) ` Indicates whether some other object is "equal to" this one.                                           | | ` void`                                                                        | ` `[finalize](https://developer.android.com/reference/java/lang/Object#finalize())`() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.                                                          | | ` final `[Class](https://developer.android.com/reference/java/lang/Class)`<?>` | ` `[getClass](https://developer.android.com/reference/java/lang/Object#getClass())`() ` Returns the runtime class of this`Object`.                                                                                                                                                | | ` int`                                                                         | ` `[hashCode](https://developer.android.com/reference/java/lang/Object#hashCode())`() ` Returns a hash code value for the object.                                                                                                                                                 | | ` final void`                                                                  | ` `[notify](https://developer.android.com/reference/java/lang/Object#notify())`() ` Wakes up a single thread that is waiting on this object's monitor.                                                                                                                            | | ` final void`                                                                  | ` `[notifyAll](https://developer.android.com/reference/java/lang/Object#notifyAll())`() ` Wakes up all threads that are waiting on this object's monitor.                                                                                                                         | | ` `[String](https://developer.android.com/reference/java/lang/String)          | ` `[toString](https://developer.android.com/reference/java/lang/Object#toString())`() ` Returns a string representation of the object.                                                                                                                                            | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long,%20int))`(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed. | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long))`(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed.                   | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait())`() ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*.                                                                                             | ||

## Public constructors

### Subject

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Subject ()
```

Create an instance of a`Subject`with an empty`Set`of Principals and empty Sets of public and private credentials.

The newly constructed Sets check whether this`Subject`has been set read-only before permitting subsequent modifications. The newly created Sets also prevent illegal modifications by ensuring that callers have sufficient permissions.

To modify the Principals Set, the caller must have`AuthPermission("modifyPrincipals")`. To modify the public credential Set, the caller must have`AuthPermission("modifyPublicCredentials")`. To modify the private credential Set, the caller must have`AuthPermission("modifyPrivateCredentials")`.

<br />

### Subject

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Subject (boolean readOnly, 
                Set<? extends Principal> principals, 
                Set<?> pubCredentials, 
                Set<?> privCredentials)
```

Create an instance of a`Subject`with Principals and credentials.

The Principals and credentials from the specified Sets are copied into newly constructed Sets. These newly created Sets check whether this`Subject`has been set read-only before permitting subsequent modifications. The newly created Sets also prevent illegal modifications by ensuring that callers have sufficient permissions.

To modify the Principals Set, the caller must have`AuthPermission("modifyPrincipals")`. To modify the public credential Set, the caller must have`AuthPermission("modifyPublicCredentials")`. To modify the private credential Set, the caller must have`AuthPermission("modifyPrivateCredentials")`.

<br />

<br />

|                                              Parameters                                              ||
|-------------------|-----------------------------------------------------------------------------------|
| `readOnly`        | `boolean`: true if the`Subject`is to be read-only, and false otherwise. <br />    |
| `principals`      | `Set`: the`Set`of Principals to be associated with this`Subject`. <br />          |
| `pubCredentials`  | `Set`: the`Set`of public credentials to be associated with this`Subject`. <br />  |
| `privCredentials` | `Set`: the`Set`of private credentials to be associated with this`Subject`. <br /> |

|                                                                                    Throws                                                                                    ||
|------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------|
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException) | if the specified`principals`,`pubCredentials`, or`privCredentials`are`null`. |

## Public methods

### doAs

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static T doAs (Subject subject, 
                PrivilegedExceptionAction<T> action)
```

Perform work as a particular`Subject`.

This method first retrieves the current Thread's`AccessControlContext`via`AccessController.getContext`, and then instantiates a new`AccessControlContext`using the retrieved context along with a new`SubjectDomainCombiner`(constructed using the provided`Subject`). Finally, this method invokes`AccessController.doPrivileged`, passing it the provided`PrivilegedExceptionAction`, as well as the newly constructed`AccessControlContext`.

<br />

<br />

|                                                  Parameters                                                  ||
|-----------|---------------------------------------------------------------------------------------------------|
| `subject` | `Subject`: the`Subject`that the specified`action`will run as. This parameter may be`null`. <br /> |
| `action`  | `PrivilegedExceptionAction`: the code to be run as the specified`Subject`. <br />                 |

|                                    Returns                                    ||
|-----|--------------------------------------------------------------------------|
| `T` | the value returned by the PrivilegedExceptionAction's`run`method. <br /> |

|                                                                                            Throws                                                                                            ||
|--------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| [PrivilegedActionException](https://developer.android.com/reference/java/security/PrivilegedActionException) | if the`PrivilegedExceptionAction.run`method throws a checked exception. <br /> |
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException)               | if the specified`PrivilegedExceptionAction`is`null`. <br />                    |
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException)                     | if the caller does not have permission to invoke this method.                  |

### doAs

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static T doAs (Subject subject, 
                PrivilegedAction<T> action)
```

Perform work as a particular`Subject`.

This method first retrieves the current Thread's`AccessControlContext`via`AccessController.getContext`, and then instantiates a new`AccessControlContext`using the retrieved context along with a new`SubjectDomainCombiner`(constructed using the provided`Subject`). Finally, this method invokes`AccessController.doPrivileged`, passing it the provided`PrivilegedAction`, as well as the newly constructed`AccessControlContext`.

<br />

<br />

|                                                  Parameters                                                  ||
|-----------|---------------------------------------------------------------------------------------------------|
| `subject` | `Subject`: the`Subject`that the specified`action`will run as. This parameter may be`null`. <br /> |
| `action`  | `PrivilegedAction`: the code to be run as the specified`Subject`. <br />                          |

|                               Returns                                ||
|-----|-----------------------------------------------------------------|
| `T` | the value returned by the PrivilegedAction's`run`method. <br /> |

|                                                                            Throws                                                                             ||
|------------------------------------------------------------------------------------------------|---------------------------------------------------------------|
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException) | if the`PrivilegedAction`is`null`. <br />                      |
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException)       | if the caller does not have permission to invoke this method. |

### doAsPrivileged

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static T doAsPrivileged (Subject subject, 
                PrivilegedExceptionAction<T> action, 
                AccessControlContext acc)
```

Perform privileged work as a particular`Subject`.

This method behaves exactly as`Subject.doAs`, except that instead of retrieving the current Thread's`AccessControlContext`, it uses the provided`AccessControlContext`. If the provided`AccessControlContext`is`null`, this method instantiates a new`AccessControlContext`with an empty collection of ProtectionDomains.

<br />

<br />

|                                                      Parameters                                                       ||
|-----------|------------------------------------------------------------------------------------------------------------|
| `subject` | `Subject`: the`Subject`that the specified`action`will run as. This parameter may be`null`. <br />          |
| `action`  | `PrivilegedExceptionAction`: the code to be run as the specified`Subject`. <br />                          |
| `acc`     | `AccessControlContext`: the`AccessControlContext`to be tied to the specified*subject* and*action* . <br /> |

|                                    Returns                                    ||
|-----|--------------------------------------------------------------------------|
| `T` | the value returned by the PrivilegedExceptionAction's`run`method. <br /> |

|                                                                                            Throws                                                                                            ||
|--------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| [PrivilegedActionException](https://developer.android.com/reference/java/security/PrivilegedActionException) | if the`PrivilegedExceptionAction.run`method throws a checked exception. <br /> |
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException)               | if the specified`PrivilegedExceptionAction`is`null`. <br />                    |
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException)                     | if the caller does not have permission to invoke this method.                  |

### doAsPrivileged

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static T doAsPrivileged (Subject subject, 
                PrivilegedAction<T> action, 
                AccessControlContext acc)
```

Perform privileged work as a particular`Subject`.

This method behaves exactly as`Subject.doAs`, except that instead of retrieving the current Thread's`AccessControlContext`, it uses the provided`AccessControlContext`. If the provided`AccessControlContext`is`null`, this method instantiates a new`AccessControlContext`with an empty collection of ProtectionDomains.

<br />

<br />

|                                                      Parameters                                                       ||
|-----------|------------------------------------------------------------------------------------------------------------|
| `subject` | `Subject`: the`Subject`that the specified`action`will run as. This parameter may be`null`. <br />          |
| `action`  | `PrivilegedAction`: the code to be run as the specified`Subject`. <br />                                   |
| `acc`     | `AccessControlContext`: the`AccessControlContext`to be tied to the specified*subject* and*action* . <br /> |

|                               Returns                                ||
|-----|-----------------------------------------------------------------|
| `T` | the value returned by the PrivilegedAction's`run`method. <br /> |

|                                                                            Throws                                                                             ||
|------------------------------------------------------------------------------------------------|---------------------------------------------------------------|
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException) | if the`PrivilegedAction`is`null`. <br />                      |
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException)       | if the caller does not have permission to invoke this method. |

### equals

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public boolean equals (Object o)
```

Compares the specified Object with this`Subject`for equality. Returns true if the given object is also a Subject and the two`Subject`instances are equivalent. More formally, two`Subject`instances are equal if their`Principal`and`Credential`Sets are equal.

<br />

<br />

|                                  Parameters                                  ||
|-----|-------------------------------------------------------------------------|
| `o` | `Object`: Object to be compared for equality with this`Subject`. <br /> |

|                                  Returns                                  ||
|-----------|----------------------------------------------------------------|
| `boolean` | true if the specified Object is equal to this`Subject`. <br /> |

|                                                                                                                                            Throws                                                                                                                                            ||
|------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) | if the caller does not have permission to access the private credentials for this`Subject`, or if the caller does not have permission to access the private credentials for the provided`Subject`. |

### getPrincipals

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Set<Principal> getPrincipals ()
```

Return the`Set`of Principals associated with this`Subject`. Each`Principal`represents an identity for this`Subject`.

The returned`Set`is backed by this Subject's internal`Principal``Set`. Any modification to the returned`Set`affects the internal`Principal``Set`as well.

<br />

<br />

|                                                                                                   Returns                                                                                                   ||
|------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------|
| [Set](https://developer.android.com/reference/java/util/Set)`<`[Principal](https://developer.android.com/reference/java/security/Principal)`>` | The`Set`of Principals associated with this`Subject`. <br /> |

### getPrincipals

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Set<T> getPrincipals (Class<T> c)
```

Return a`Set`of Principals associated with this`Subject`that are instances or subclasses of the specified`Class`.

The returned`Set`is not backed by this Subject's internal`Principal``Set`. A new`Set`is created and returned for each method invocation. Modifications to the returned`Set`will not affect the internal`Principal``Set`.

<br />

<br />

|                                        Parameters                                        ||
|-----|-------------------------------------------------------------------------------------|
| `c` | `Class`: the returned`Set`of Principals will all be instances of this class. <br /> |

|                                                                  Returns                                                                  ||
|-------------------------------------------------------------------|------------------------------------------------------------------------|
| [Set](https://developer.android.com/reference/java/util/Set)`<T>` | a`Set`of Principals that are instances of the specified`Class`. <br /> |

|                                                              Throws                                                              ||
|------------------------------------------------------------------------------------------------|----------------------------------|
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException) | if the specified`Class`is`null`. |

### getPrivateCredentials

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Set<T> getPrivateCredentials (Class<T> c)
```

Return a`Set`of private credentials associated with this`Subject`that are instances or subclasses of the specified`Class`.

The caller must have permission to access all of the requested Credentials, or a`SecurityException`will be thrown.

The returned`Set`is not backed by this Subject's internal private Credential`Set`. A new`Set`is created and returned for each method invocation. Modifications to the returned`Set`will not affect the internal private Credential`Set`.

<br />

<br />

|                                            Parameters                                             ||
|-----|----------------------------------------------------------------------------------------------|
| `c` | `Class`: the returned`Set`of private credentials will all be instances of this class. <br /> |

|                                                                      Returns                                                                       ||
|-------------------------------------------------------------------|---------------------------------------------------------------------------------|
| [Set](https://developer.android.com/reference/java/util/Set)`<T>` | a`Set`of private credentials that are instances of the specified`Class`. <br /> |

|                                                              Throws                                                              ||
|------------------------------------------------------------------------------------------------|----------------------------------|
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException) | if the specified`Class`is`null`. |

### getPrivateCredentials

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Set<Object> getPrivateCredentials ()
```

Return the`Set`of private credentials held by this`Subject`.

The returned`Set`is backed by this Subject's internal private Credential`Set`. Any modification to the returned`Set`affects the internal private Credential`Set`as well.

A caller requires permissions to access the Credentials in the returned`Set`, or to modify the`Set`itself. A`SecurityException`is thrown if the caller does not have the proper permissions.

While iterating through the`Set`, a`SecurityException`is thrown if the caller does not have permission to access a particular Credential. The`Iterator`is nevertheless advanced to next element in the`Set`.

<br />

<br />

|                                                                                             Returns                                                                                              ||
|--------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------|
| [Set](https://developer.android.com/reference/java/util/Set)`<`[Object](https://developer.android.com/reference/java/lang/Object)`>` | A`Set`of private credentials held by this`Subject`. <br /> |

### getPublicCredentials

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Set<Object> getPublicCredentials ()
```

Return the`Set`of public credentials held by this`Subject`.

The returned`Set`is backed by this Subject's internal public Credential`Set`. Any modification to the returned`Set`affects the internal public Credential`Set`as well.

<br />

<br />

|                                                                                             Returns                                                                                             ||
|--------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| [Set](https://developer.android.com/reference/java/util/Set)`<`[Object](https://developer.android.com/reference/java/lang/Object)`>` | A`Set`of public credentials held by this`Subject`. <br /> |

### getPublicCredentials

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Set<T> getPublicCredentials (Class<T> c)
```

Return a`Set`of public credentials associated with this`Subject`that are instances or subclasses of the specified`Class`.

The returned`Set`is not backed by this Subject's internal public Credential`Set`. A new`Set`is created and returned for each method invocation. Modifications to the returned`Set`will not affect the internal public Credential`Set`.

<br />

<br />

|                                            Parameters                                            ||
|-----|---------------------------------------------------------------------------------------------|
| `c` | `Class`: the returned`Set`of public credentials will all be instances of this class. <br /> |

|                                                                      Returns                                                                      ||
|-------------------------------------------------------------------|--------------------------------------------------------------------------------|
| [Set](https://developer.android.com/reference/java/util/Set)`<T>` | a`Set`of public credentials that are instances of the specified`Class`. <br /> |

|                                                              Throws                                                              ||
|------------------------------------------------------------------------------------------------|----------------------------------|
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException) | if the specified`Class`is`null`. |

### getSubject

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static Subject getSubject (AccessControlContext acc)
```

Get the`Subject`associated with the provided`AccessControlContext`.

The`AccessControlContext`may contain many Subjects (from nested`doAs`calls). In this situation, the most recent`Subject`associated with the`AccessControlContext`is returned.

<br />

<br />

|                                             Parameters                                              ||
|-------|----------------------------------------------------------------------------------------------|
| `acc` | `AccessControlContext`: the`AccessControlContext`from which to retrieve the`Subject`. <br /> |

|                                                                                                               Returns                                                                                                               ||
|--------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| [Subject](https://developer.android.com/reference/javax/security/auth/Subject) | the`Subject`associated with the provided`AccessControlContext`, or`null`if no`Subject`is associated with the provided`AccessControlContext`. <br /> |

|                                                                               Throws                                                                               ||
|------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException)       | if the caller does not have permission to get the`Subject`. <br /> |
| [NullPointerException](https://developer.android.com/reference/java/lang/NullPointerException) | if the provided`AccessControlContext`is`null`.                     |

### hashCode

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public int hashCode ()
```

Returns a hashcode for this`Subject`.

<br />

<br />

|                   Returns                   ||
|-------|--------------------------------------|
| `int` | a hashcode for this`Subject`. <br /> |

|                                                                                     Throws                                                                                     ||
|------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) | if the caller does not have permission to access this Subject's private credentials. |

### isReadOnly

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public boolean isReadOnly ()
```

Query whether this`Subject`is read-only.

<br />

<br />

|                                Returns                                ||
|-----------|------------------------------------------------------------|
| `boolean` | true if this`Subject`is read-only, false otherwise. <br /> |

### setReadOnly

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void setReadOnly ()
```

Set this`Subject`to be read-only.

Modifications (additions and removals) to this Subject's`Principal``Set`and credential Sets will be disallowed. The`destroy`operation on this Subject's credentials will still be permitted.

Subsequent attempts to modify the Subject's`Principal`and credential Sets will result in an`IllegalStateException`being thrown. Also, once a`Subject`is read-only, it can not be reset to being writable again.

<br />

<br />

|                                                                                Throws                                                                                 ||
|------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) | if the caller does not have permission to set this`Subject`to be read-only. |

### toString

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public String toString ()
```

Return the String representation of this`Subject`.

<br />

<br />

|                                                        Returns                                                         ||
|--------------------------------------------------------------------|----------------------------------------------------|
| [String](https://developer.android.com/reference/java/lang/String) | the String representation of this`Subject`. <br /> |