|
|
|
@ -138,7 +138,19 @@ public interface Authentication extends Principal, Serializable { |
|
|
|
void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException; |
|
|
|
void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Return an {@link Builder} based on this instance |
|
|
|
* Return an {@link Builder} based on this instance. By default, returns a builder |
|
|
|
|
|
|
|
* that builds a {@link SimpleAuthentication}. |
|
|
|
|
|
|
|
* <p> |
|
|
|
|
|
|
|
* Although a {@code default} method, all {@link Authentication} implementations |
|
|
|
|
|
|
|
* should implement this. The reason is to ensure that the {@link Authentication} type |
|
|
|
|
|
|
|
* is preserved when {@link Builder#build} is invoked. This is especially important in |
|
|
|
|
|
|
|
* the event that your authentication implementation contains custom fields. |
|
|
|
|
|
|
|
* </p> |
|
|
|
|
|
|
|
* <p> |
|
|
|
|
|
|
|
* This isn't strictly necessary since it is recommended that applications code to the |
|
|
|
|
|
|
|
* {@link Authentication} interface and that custom information is often contained in |
|
|
|
|
|
|
|
* the {@link Authentication#getPrincipal} value. |
|
|
|
|
|
|
|
* </p> |
|
|
|
* @return an {@link Builder} for building a new {@link Authentication} based on this |
|
|
|
* @return an {@link Builder} for building a new {@link Authentication} based on this |
|
|
|
* instance |
|
|
|
* instance |
|
|
|
* @since 7.0 |
|
|
|
* @since 7.0 |
|
|
|
@ -155,17 +167,72 @@ public interface Authentication extends Principal, Serializable { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
interface Builder<B extends Builder<B>> { |
|
|
|
interface Builder<B extends Builder<B>> { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Mutate the authorities with this {@link Consumer}. |
|
|
|
|
|
|
|
* <p> |
|
|
|
|
|
|
|
* Note that since a non-empty set of authorities implies an |
|
|
|
|
|
|
|
* {@link Authentication} is authenticated, this method also marks the |
|
|
|
|
|
|
|
* authentication as {@link #authenticated} by default. |
|
|
|
|
|
|
|
* </p> |
|
|
|
|
|
|
|
* @param authorities a consumer that receives the full set of authorities |
|
|
|
|
|
|
|
* @return the {@link Builder} for additional configuration |
|
|
|
|
|
|
|
* @see Authentication#getAuthorities |
|
|
|
|
|
|
|
*/ |
|
|
|
B authorities(Consumer<Collection<GrantedAuthority>> authorities); |
|
|
|
B authorities(Consumer<Collection<GrantedAuthority>> authorities); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Use this credential. |
|
|
|
|
|
|
|
* <p> |
|
|
|
|
|
|
|
* Note that since some credentials are insecure to store, this method is |
|
|
|
|
|
|
|
* implemented as unsupported by default. Only implement or use this method if you |
|
|
|
|
|
|
|
* support secure storage of the credential or if your implementation also |
|
|
|
|
|
|
|
* implements {@link CredentialsContainer} and the credentials are thereby erased. |
|
|
|
|
|
|
|
* </p> |
|
|
|
|
|
|
|
* @param credentials the credentials to use |
|
|
|
|
|
|
|
* @return the {@link Builder} for additional configuration |
|
|
|
|
|
|
|
* @see Authentication#getCredentials |
|
|
|
|
|
|
|
*/ |
|
|
|
default B credentials(@Nullable Object credentials) { |
|
|
|
default B credentials(@Nullable Object credentials) { |
|
|
|
throw new UnsupportedOperationException( |
|
|
|
throw new UnsupportedOperationException( |
|
|
|
String.format("%s does not store credentials", this.getClass().getSimpleName())); |
|
|
|
String.format("%s does not store credentials", this.getClass().getSimpleName())); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Use this details object. |
|
|
|
|
|
|
|
* <p> |
|
|
|
|
|
|
|
* Implementations may choose to use these {@code details} in combination with any |
|
|
|
|
|
|
|
* principal from the pre-existing {@link Authentication} instance. |
|
|
|
|
|
|
|
* </p> |
|
|
|
|
|
|
|
* @param details the details to use |
|
|
|
|
|
|
|
* @return the {@link Builder} for additional configuration |
|
|
|
|
|
|
|
* @see Authentication#getDetails |
|
|
|
|
|
|
|
*/ |
|
|
|
B details(@Nullable Object details); |
|
|
|
B details(@Nullable Object details); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Use this principal. |
|
|
|
|
|
|
|
* <p> |
|
|
|
|
|
|
|
* Note that in many cases, the principal is strongly-typed. Implementations may |
|
|
|
|
|
|
|
* choose to do a type check and are not necessarily expected to allow any object |
|
|
|
|
|
|
|
* as a principal. |
|
|
|
|
|
|
|
* </p> |
|
|
|
|
|
|
|
* <p> |
|
|
|
|
|
|
|
* Implementations may choose to use this {@code principal} in combination with |
|
|
|
|
|
|
|
* any principal from the pre-existing {@link Authentication} instance. |
|
|
|
|
|
|
|
* </p> |
|
|
|
|
|
|
|
* @param principal the principal to use |
|
|
|
|
|
|
|
* @return the {@link Builder} for additional configuration |
|
|
|
|
|
|
|
* @see Authentication#getPrincipal |
|
|
|
|
|
|
|
*/ |
|
|
|
B principal(@Nullable Object principal); |
|
|
|
B principal(@Nullable Object principal); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Mark this authentication as authenticated or not |
|
|
|
|
|
|
|
* @param authenticated whether this is an authenticated {@link Authentication} |
|
|
|
|
|
|
|
* instance |
|
|
|
|
|
|
|
* @return the {@link Builder} for additional configuration |
|
|
|
|
|
|
|
* @see Authentication#isAuthenticated |
|
|
|
|
|
|
|
*/ |
|
|
|
B authenticated(boolean authenticated); |
|
|
|
B authenticated(boolean authenticated); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
|