public final class MultiTenantAuthenticationManagerResolver<T> extends java.lang.Object implements AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest>
AuthenticationManagerResolver
that separates the tasks of
extracting the request's tenant identifier and looking up an AuthenticationManager
by that tenant identifier.AuthenticationManagerResolver
Constructor and Description |
---|
MultiTenantAuthenticationManagerResolver(org.springframework.core.convert.converter.Converter<javax.servlet.http.HttpServletRequest,T> tenantResolver,
org.springframework.core.convert.converter.Converter<T,AuthenticationManager> authenticationManagerResolver)
Constructs a
MultiTenantAuthenticationManagerResolver with the provided parameters |
Modifier and Type | Method and Description |
---|---|
AuthenticationManager |
resolve(javax.servlet.http.HttpServletRequest context)
Resolve an
AuthenticationManager from a provided context |
static AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest> |
resolveFromHeader(java.lang.String headerName,
org.springframework.core.convert.converter.Converter<java.lang.String,AuthenticationManager> resolver)
Creates an
AuthenticationManagerResolver that will use a request headers's value as
the resolution key for the underlying AuthenticationManagerResolver . |
static AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest> |
resolveFromPath(org.springframework.core.convert.converter.Converter<java.lang.String,AuthenticationManager> resolver)
Creates an
AuthenticationManagerResolver that will use a request path's first segment as
the resolution key for the underlying AuthenticationManagerResolver . |
static AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest> |
resolveFromSubdomain(org.springframework.core.convert.converter.Converter<java.lang.String,AuthenticationManager> resolver)
Creates an
AuthenticationManagerResolver that will use a hostname's first label as
the resolution key for the underlying AuthenticationManagerResolver . |
public MultiTenantAuthenticationManagerResolver(org.springframework.core.convert.converter.Converter<javax.servlet.http.HttpServletRequest,T> tenantResolver, org.springframework.core.convert.converter.Converter<T,AuthenticationManager> authenticationManagerResolver)
MultiTenantAuthenticationManagerResolver
with the provided parameterstenantResolver
- authenticationManagerResolver
- public AuthenticationManager resolve(javax.servlet.http.HttpServletRequest context)
AuthenticationManagerResolver
AuthenticationManager
from a provided contextresolve
in interface AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest>
AuthenticationManager
to usepublic static AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest> resolveFromSubdomain(org.springframework.core.convert.converter.Converter<java.lang.String,AuthenticationManager> resolver)
AuthenticationManagerResolver
that will use a hostname's first label as
the resolution key for the underlying AuthenticationManagerResolver
.
For example, you might have a set of AuthenticationManager
s defined like so:
MapAnd that your system serves hostnames likeauthenticationManagers = new HashMap<>(); authenticationManagers.put("tenantOne", managerOne()); authenticationManagers.put("tenantTwo", managerTwo());
https://tenantOne.example.org. Then, you could create an
AuthenticationManagerResolver
that uses the "tenantOne" value from
the hostname to resolve Tenant One's AuthenticationManager
like so:
AuthenticationManagerResolverresolver = resolveFromSubdomain(authenticationManagers::get);
HttpServletRequest
resolver
- A String
-resolving AuthenticationManagerResolver
AuthenticationManagerResolver
public static AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest> resolveFromPath(org.springframework.core.convert.converter.Converter<java.lang.String,AuthenticationManager> resolver)
AuthenticationManagerResolver
that will use a request path's first segment as
the resolution key for the underlying AuthenticationManagerResolver
.
For example, you might have a set of AuthenticationManager
s defined like so:
MapAnd that your system serves requests likeauthenticationManagers = new HashMap<>(); authenticationManagers.put("tenantOne", managerOne()); authenticationManagers.put("tenantTwo", managerTwo());
https://example.org/tenantOne. Then, you could create an
AuthenticationManagerResolver
that uses the "tenantOne" value from
the request to resolve Tenant One's AuthenticationManager
like so:
AuthenticationManagerResolverresolver = resolveFromPath(authenticationManagers::get);
HttpServletRequest
resolver
- A String
-resolving AuthenticationManagerResolver
AuthenticationManagerResolver
public static AuthenticationManagerResolver<javax.servlet.http.HttpServletRequest> resolveFromHeader(java.lang.String headerName, org.springframework.core.convert.converter.Converter<java.lang.String,AuthenticationManager> resolver)
AuthenticationManagerResolver
that will use a request headers's value as
the resolution key for the underlying AuthenticationManagerResolver
.
For example, you might have a set of AuthenticationManager
s defined like so:
MapAnd that your system serves requests with a header likeauthenticationManagers = new HashMap<>(); authenticationManagers.put("tenantOne", managerOne()); authenticationManagers.put("tenantTwo", managerTwo());
X-Tenant-Id: tenantOne. Then, you could create an
AuthenticationManagerResolver
that uses the "tenantOne" value from
the request to resolve Tenant One's AuthenticationManager
like so:
AuthenticationManagerResolverresolver = resolveFromHeader("X-Tenant-Id", authenticationManagers::get);
HttpServletRequest
resolver
- A String
-resolving AuthenticationManagerResolver
AuthenticationManagerResolver