|
@@ -138,7 +138,19 @@ public interface Authentication extends Principal, Serializable {
|
|
|
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
|
|
|
* instance
|
|
|
* @since 7.0
|
|
@@ -155,17 +167,72 @@ public interface Authentication extends Principal, Serializable {
|
|
|
*/
|
|
|
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);
|
|
|
|
|
|
+ /**
|
|
|
+ * 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) {
|
|
|
throw new UnsupportedOperationException(
|
|
|
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);
|
|
|
|
|
|
+ /**
|
|
|
+ * 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);
|
|
|
|
|
|
+ /**
|
|
|
+ * 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);
|
|
|
|
|
|
/**
|