Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.nifi.processors.standard.util; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.ValidationContext; import org.apache.nifi.components.ValidationResult; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.StandardValidators; import org.apache.nifi.proxy.ProxyConfiguration; import org.apache.nifi.proxy.ProxySpec; import java.net.Proxy; import java.util.Collection; import java.util.Map; public class HTTPUtils { public static final String HTTP_REQUEST_URI = "http.request.uri"; public static final String HTTP_REMOTE_HOST = "http.remote.host"; public static final String HTTP_LOCAL_NAME = "http.local.name"; public static final String HTTP_PORT = "http.server.port"; public static final String HTTP_SSL_CERT = "http.subject.dn"; public static final String HTTP_CONTEXT_ID = "http.context.identifier"; public static String getURI(Map<String, String> map) { final String client = map.get(HTTP_REMOTE_HOST); final String server = map.get(HTTP_LOCAL_NAME); final String port = map.get(HTTP_PORT); final String uri = map.get(HTTP_REQUEST_URI); if (map.get(HTTP_SSL_CERT) == null) { return "http://" + client + "@" + server + ":" + port + uri; } else { return "https://" + client + "@" + server + ":" + port + uri; } } public static final PropertyDescriptor PROXY_HOST = new PropertyDescriptor.Builder().name("Proxy Host") .description("The fully qualified hostname or IP address of the proxy server").required(false) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build(); public static final PropertyDescriptor PROXY_PORT = new PropertyDescriptor.Builder().name("Proxy Port") .description("The port of the proxy server").required(false) .addValidator(StandardValidators.PORT_VALIDATOR).build(); private static final ProxySpec[] PROXY_SPECS = { ProxySpec.HTTP_AUTH }; public static final PropertyDescriptor PROXY_CONFIGURATION_SERVICE = ProxyConfiguration .createProxyConfigPropertyDescriptor(true, PROXY_SPECS); public static void setProxy(final ProcessContext context, final HttpClientBuilder clientBuilder, final CredentialsProvider credentialsProvider) { // Set the proxy if specified final ProxyConfiguration proxyConfig = ProxyConfiguration.getConfiguration(context, () -> { if (context.getProperty(PROXY_HOST).isSet() && context.getProperty(PROXY_PORT).isSet()) { final ProxyConfiguration componentProxyConfig = new ProxyConfiguration(); final String host = context.getProperty(PROXY_HOST).getValue(); final int port = context.getProperty(PROXY_PORT).asInteger(); componentProxyConfig.setProxyType(Proxy.Type.HTTP); componentProxyConfig.setProxyServerHost(host); componentProxyConfig.setProxyServerPort(port); return componentProxyConfig; } return ProxyConfiguration.DIRECT_CONFIGURATION; }); if (Proxy.Type.HTTP.equals(proxyConfig.getProxyType())) { final String host = proxyConfig.getProxyServerHost(); final int port = proxyConfig.getProxyServerPort(); clientBuilder.setProxy(new HttpHost(host, port)); if (proxyConfig.hasCredential()) { final AuthScope proxyAuthScope = new AuthScope(host, port); final UsernamePasswordCredentials proxyCredential = new UsernamePasswordCredentials( proxyConfig.getProxyUserName(), proxyConfig.getProxyUserPassword()); credentialsProvider.setCredentials(proxyAuthScope, proxyCredential); } } } public static void validateProxyProperties(ValidationContext context, Collection<ValidationResult> results) { if (context.getProperty(PROXY_HOST).isSet() && !context.getProperty(PROXY_PORT).isSet()) { results.add( new ValidationResult.Builder().explanation("Proxy Host was set but no Proxy Port was specified") .valid(false).subject("Proxy server configuration").build()); } ProxyConfiguration.validateProxySpec(context, results, PROXY_SPECS); } }