[java-identity-provider] branch master updated: IDP-1170 - REST DataConnector
Scott Cantor
cantor.2 at osu.edu
Tue Aug 8 13:44:43 EDT 2017
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch master
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=d7e03e98fb39b9c0108b999223c23530677d6da4
The following commit(s) were added to refs/heads/master by this push:
new d7e03e9 IDP-1170 - REST DataConnector
d7e03e9 is described below
commit d7e03e98fb39b9c0108b999223c23530677d6da4
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Aug 8 13:44:41 2017 -0400
IDP-1170 - REST DataConnector
https://issues.shibboleth.net/jira/browse/IDP-1170
Refactor to move security params back into connector.
---
.../dc/http/impl/AbstractHTTPSearchBuilder.java | 49 ++++++++++++++--------
.../resolver/dc/http/impl/HTTPDataConnector.java | 21 +++++++++-
.../resolver/dc/http/impl/HTTPSearch.java | 4 ++
.../resolver/dc/http/impl/TemplatedURLBuilder.java | 1 +
.../dc/http/impl/HTTPDataConnectorParser.java | 7 ++++
5 files changed, 62 insertions(+), 20 deletions(-)
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index af76fd4..671ddd8 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -59,10 +59,28 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
/** HTTP client security parameters. */
@Nullable private HttpClientSecurityParameters httpClientSecurityParameters;
+
+ /**
+ * Get the optional client security parameters.
+ *
+ * <p>This is informational to accommodate a scenario in which the parameters should influence
+ * the construction of the request, but the actual parameters to use will be supplied to the
+ * {@link HTTPSearch#execute(HttpClient, HttpClientSecurityParameters, HTTPResponseMappingStrategy)} method.</p>
+ *
+ * @return client security parameters
+ */
+ @Nullable public HttpClientSecurityParameters getHttpClientSecurityParameters() {
+ return httpClientSecurityParameters;
+ }
+
/**
* Set the optional client security parameters.
*
- * @param params the new client security parameters
+ * <p>This is informational to accommodate a scenario in which the parameters should influence
+ * the construction of the request, but the actual parameters to use will be supplied to the
+ * {@link HTTPSearch#execute(HttpClient, HttpClientSecurityParameters, HTTPResponseMappingStrategy)} method.</p>
+ *
+ * @param params client security parameters
*/
public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
@@ -76,9 +94,10 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
@Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
final HttpUriRequest request = getHttpRequest(resolutionContext, dependencyAttributes);
- final HttpClientContext context = buildHttpContext(request);
+// Checkstyle: AnonInnerLength OFF
return new HTTPSearch() {
+
/** {@inheritDoc} */
@Nonnull public String getResultCacheKey() {
Constraint.isTrue(request instanceof HttpGet, "Only GET requests are cacheable");
@@ -92,12 +111,19 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
/** {@inheritDoc} */
@Nonnull public Map<String,IdPAttribute> execute(@Nonnull final HttpClient client,
+ @Nullable final HttpClientSecurityParameters securityParameters,
@Nonnull final HTTPResponseMappingStrategy mappingStrategy) throws IOException {
- final Map<String,IdPAttribute> results = client.execute(request, mappingStrategy, context);
- HttpClientSecuritySupport.checkTLSCredentialEvaluated(context, request.getURI().getScheme());
+
+ final HttpClientContext clientContext = HttpClientContext.create();
+ HttpClientSecuritySupport.marshalSecurityParameters(clientContext, httpClientSecurityParameters, true);
+ HttpClientSecuritySupport.addDefaultTLSTrustEngineCriteria(clientContext, request);
+ final Map<String,IdPAttribute> results = client.execute(request, mappingStrategy, clientContext);
+ HttpClientSecuritySupport.checkTLSCredentialEvaluated(clientContext, request.getURI().getScheme());
return results;
}
+
};
+// Checkstyle: AnonInnerLength ON
}
/**
@@ -131,18 +157,5 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
throw new ResolutionException(e);
}
}
-
- /**
- * Build the {@link HttpClientContext} instance to be used.
- *
- * @param request the HTTP client request
- * @return the client context instance
- */
- @Nonnull private HttpClientContext buildHttpContext(@Nonnull final HttpUriRequest request) {
- final HttpClientContext clientContext = HttpClientContext.create();
- HttpClientSecuritySupport.marshalSecurityParameters(clientContext, httpClientSecurityParameters, false);
- HttpClientSecuritySupport.addDefaultTLSTrustEngineCriteria(clientContext, request);
- return clientContext;
- }
-
+
}
\ No newline at end of file
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
index 2eb808f..90951e2 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
@@ -28,6 +28,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.http.client.HttpClient;
+import org.opensaml.security.httpclient.HttpClientSecurityParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.shibboleth.idp.attribute.IdPAttribute;
@@ -49,6 +50,9 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
/** The {@link HttpClient} to use. */
@NonnullAfterInit private HttpClient httpClient;
+ /** HTTP client security parameters. */
+ @Nullable private HttpClientSecurityParameters httpClientSecurityParameters;
+
/** Constructor. */
public HTTPDataConnector() {
setValidator(new Validator() {
@@ -68,7 +72,19 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
httpClient = Constraint.isNotNull(client, "HttpClient cannot be null");
}
-
+
+ /**
+ * Set the optional client security parameters.
+ *
+ * @param params the new client security parameters
+ */
+ public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+ ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+
+ httpClientSecurityParameters = params;
+ }
+
/** {@inheritDoc} */
public void doInitialize() throws ComponentInitializationException {
super.doInitialize();
@@ -84,7 +100,8 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
throws ResolutionException {
try {
- return getMappingStrategy().map(executable.execute(httpClient, getMappingStrategy()));
+ return getMappingStrategy().map(
+ executable.execute(httpClient, httpClientSecurityParameters, getMappingStrategy()));
} catch (final IOException e) {
throw new ResolutionException(getLogPrefix() + " HTTP request failed", e);
}
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java
index 8bf0ec3..c760e59 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java
@@ -21,8 +21,10 @@ import java.io.IOException;
import java.util.Map;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.apache.http.client.HttpClient;
+import org.opensaml.security.httpclient.HttpClientSecurityParameters;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.resolver.dc.impl.ExecutableSearch;
@@ -34,12 +36,14 @@ public interface HTTPSearch extends ExecutableSearch {
* The abstraction that will contact the service and obtain results.
*
* @param client the HTTP client
+ * @param securityParameters client security settings
* @param mappingStrategy response mapping strategy
*
* @return attribute results
* @throws IOException if an error occurs
*/
@Nonnull Map<String,IdPAttribute> execute(@Nonnull final HttpClient client,
+ @Nullable final HttpClientSecurityParameters securityParameters,
@Nonnull final HTTPResponseMappingStrategy mappingStrategy) throws IOException;
}
\ No newline at end of file
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
index ca3cf8d2..61e2ee9 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
@@ -167,6 +167,7 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
log.trace("Creating request URL using attribute resolution context {}", resolutionContext);
context.put("resolutionContext", resolutionContext);
+ context.put("httpClientSecurityParameters", getHttpClientSecurityParameters());
context.put("paramEscaper", paramEscaper);
context.put("fragmentEscaper", fragmentEscaper);
context.put("pathEscaper", pathEscaper);
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java
index b3f40d7..2733151 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java
@@ -71,6 +71,12 @@ public class HTTPDataConnectorParser extends AbstractDataConnectorParser {
if (httpClientID != null) {
builder.addPropertyReference("httpClient", httpClientID);
}
+
+ final String securityParams =
+ StringSupport.trimOrNull(config.getAttributeNS(null, "httpClientSecurityParametersRef"));
+ if (securityParams != null) {
+ builder.addPropertyReference("httpClientSecurityParameters", securityParams);
+ }
final String searchBuilderID = v2Parser.getBeanSearchBuilderID();
if (searchBuilderID != null) {
@@ -171,6 +177,7 @@ public class HTTPDataConnectorParser extends AbstractDataConnectorParser {
}
templateBuilder.addPropertyReference("velocityEngine", velocityEngineRef);
+ // This is duplication but allows the built-in builder to access the parameters if desired.
final String securityParams =
StringSupport.trimOrNull(configElement.getAttributeNS(null, "httpClientSecurityParametersRef"));
if (securityParams != null) {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list