Make AuthorizationServerContext an interface

Closes gh-867
This commit is contained in:
Joe Grandja
2022-08-22 16:57:00 -04:00
parent f583668a9c
commit aebc613862
14 changed files with 102 additions and 53 deletions

View File

@@ -16,6 +16,7 @@
package org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers;
import java.io.IOException;
import java.util.function.Supplier;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@@ -52,8 +53,10 @@ final class AuthorizationServerContextFilter extends OncePerRequestFilter {
throws ServletException, IOException {
try {
AuthorizationServerContext authorizationServerContext = new AuthorizationServerContext(
this.authorizationServerSettings, () -> resolveIssuer(this.authorizationServerSettings, request));
AuthorizationServerContext authorizationServerContext =
new DefaultAuthorizationServerContext(
() -> resolveIssuer(this.authorizationServerSettings, request),
this.authorizationServerSettings);
AuthorizationServerContextHolder.setContext(authorizationServerContext);
filterChain.doFilter(request, response);
} finally {
@@ -78,4 +81,25 @@ final class AuthorizationServerContextFilter extends OncePerRequestFilter {
// @formatter:on
}
private static final class DefaultAuthorizationServerContext implements AuthorizationServerContext {
private final Supplier<String> issuerSupplier;
private final AuthorizationServerSettings authorizationServerSettings;
private DefaultAuthorizationServerContext(Supplier<String> issuerSupplier, AuthorizationServerSettings authorizationServerSettings) {
this.issuerSupplier = issuerSupplier;
this.authorizationServerSettings = authorizationServerSettings;
}
@Override
public String getIssuer() {
return this.issuerSupplier.get();
}
@Override
public AuthorizationServerSettings getAuthorizationServerSettings() {
return this.authorizationServerSettings;
}
}
}

View File

@@ -15,11 +15,7 @@
*/
package org.springframework.security.oauth2.server.authorization.context;
import java.util.function.Supplier;
import org.springframework.lang.Nullable;
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
import org.springframework.util.Assert;
/**
* A context that holds information of the Authorization Server runtime environment.
@@ -29,42 +25,20 @@ import org.springframework.util.Assert;
* @see AuthorizationServerSettings
* @see AuthorizationServerContextHolder
*/
public final class AuthorizationServerContext {
private final AuthorizationServerSettings authorizationServerSettings;
private final Supplier<String> issuerSupplier;
public interface AuthorizationServerContext {
/**
* Constructs an {@code AuthorizationServerContext} using the provided parameters.
* Returns the {@code URL} of the Authorization Server's issuer identifier.
*
* @param authorizationServerSettings the authorization server settings
* @param issuerSupplier a {@code Supplier} for the {@code URL} of the Authorization Server's issuer identifier
* @return the {@code URL} of the Authorization Server's issuer identifier
*/
public AuthorizationServerContext(AuthorizationServerSettings authorizationServerSettings, @Nullable Supplier<String> issuerSupplier) {
Assert.notNull(authorizationServerSettings, "authorizationServerSettings cannot be null");
this.authorizationServerSettings = authorizationServerSettings;
this.issuerSupplier = issuerSupplier;
}
String getIssuer();
/**
* Returns the {@link AuthorizationServerSettings}.
*
* @return the {@link AuthorizationServerSettings}
*/
public AuthorizationServerSettings getAuthorizationServerSettings() {
return this.authorizationServerSettings;
}
/**
* Returns the {@code URL} of the Authorization Server's issuer identifier.
* The issuer identifier is resolved from the constructor parameter {@code Supplier<String>}
* or if not provided then defaults to {@link AuthorizationServerSettings#getIssuer()}.
*
* @return the {@code URL} of the Authorization Server's issuer identifier
*/
public String getIssuer() {
return this.issuerSupplier != null ?
this.issuerSupplier.get() :
getAuthorizationServerSettings().getIssuer();
}
AuthorizationServerSettings getAuthorizationServerSettings();
}