123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package com.shkpr.service.proxycenter.components;
- import com.shkpr.service.proxycenter.commtools.HttpTool;
- import com.shkpr.service.proxycenter.constants.ApiURI;
- import com.shkpr.service.proxycenter.controllerfilter.TokenAuthenticationService;
- import com.shkpr.service.proxycenter.dto.ResponseCode;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.utils.URIUtils;
- import org.apache.http.conn.ssl.NoopHostnameVerifier;
- import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
- import org.apache.http.impl.client.HttpClientBuilder;
- import org.mitre.dsmiley.httpproxy.ProxyServlet;
- import javax.net.ssl.SSLContext;
- import javax.net.ssl.X509TrustManager;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.net.URI;
- import java.net.URISyntaxException;
- import java.security.SecureRandom;
- import java.security.cert.CertificateException;
- import java.security.cert.X509Certificate;
- public abstract class AbstractProxyServlet extends ProxyServlet {
- private String apiProxy = "https://127.0.0.1:9000/";
- public AbstractProxyServlet(String apiProxy) {
- this.apiProxy = apiProxy;
- }
- public AbstractProxyServlet() {
- }
- @Override
- protected HttpClient createHttpClient() {
- HttpClientBuilder clientBuilder = HttpClientBuilder.create().
- setDefaultRequestConfig(this.buildRequestConfig()).
- setDefaultSocketConfig(this.buildSocketConfig());
- clientBuilder.setMaxConnTotal(this.maxConnections);
- clientBuilder.setMaxConnTotal(maxConnections);
- if (this.useSystemProperties) {
- clientBuilder = clientBuilder.useSystemProperties();
- }
- SSLContext sslContext = null;
- try {
- sslContext = SSLContext.getInstance("TLS");sslContext.init(null, new X509TrustManager[]{new X509TrustManager() {
- public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
- }
- public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
- }
- public X509Certificate[] getAcceptedIssuers() {
- return new X509Certificate[0];
- }
- }}, new SecureRandom());
- }catch (Exception e){}
- if (sslContext != null){
- SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
- clientBuilder.setSSLSocketFactory(sslSocketFactory);
- }
- return clientBuilder.build();
- }
- @Override
- protected void service(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException {
- ResponseCode headerCheck = checkHeader(servletRequest, servletResponse);
- if (headerCheck != ResponseCode.RESULT_NORMAL) {
- HttpTool.handlerHttpErrorStatus(servletResponse, headerCheck);
- return;
- }
- final String destUri = servletRequest.getRequestURI();
- servletRequest.setAttribute(ATTR_TARGET_URI, null);
- if (destUri.startsWith(ApiURI.URI_BASE_PROXY_H)){
- //若不重置super.targetUri;则super.targetUri实际地址为【/data-gw/3th/dma-proxy/*】中*号匹配的部分
- //若重置super.targetUri=XXX; 则super.targetUri实际地址为XXX +【/data-gw/3th/dma-proxy/*】中*号匹配的部分
- super.targetUri = ApiURI.URI_BASE_PROXY_H;
- }else if (destUri.startsWith(ApiURI.URI_TASK_PROXY_H)){
- super.targetUri = ApiURI.URI_TASK_PROXY_H;
- }else if (destUri.startsWith(ApiURI.URI_ANALY_PROXY_H)){
- //nothing
- }else if (destUri.startsWith(ApiURI.URI_PUSH_PROXY_H)){
- super.targetUri = ApiURI.URI_PUSH_PROXY_H;
- }else if (destUri.startsWith(ApiURI.URI_IOT_STATS_PROXY_H)){
- super.targetUri = ApiURI.URI_IOT_STATS_PROXY_H;
- }else if (destUri.startsWith(ApiURI.URI_IOT_STATS_OLD_PROXY_H)){
- super.targetUri = ApiURI.URI_IOT_STATS_OLD_PROXY_H;
- }else if (destUri.startsWith(ApiURI.URI_GIS_AE_PROXY_H)){
- super.targetUri = ApiURI.URI_GIS_AE_PROXY_H;
- }else if (destUri.startsWith(ApiURI.URI_DATE_GW_PROXY_H)){
- super.targetUri = ApiURI.URI_DATE_GW_PROXY_H;
- }else if (destUri.startsWith(ApiURI.URI_AI_MODEL_PROXY_H)){
- super.targetUri = ApiURI.URI_AI_MODEL_PROXY_H;
- }
- URI uri = null;
- try {
- uri = new URI(apiProxy);
- } catch (URISyntaxException e) {
- e.printStackTrace();
- }
- servletRequest.setAttribute(ATTR_TARGET_HOST, null);
- super.targetHost = URIUtils.extractHost(uri);
- super.service(servletRequest, servletResponse);
- }
- protected ResponseCode checkHeader(HttpServletRequest servletRequest, HttpServletResponse servletResponse){
- ResponseCode oRes = ResponseCode.RESULT_NORMAL;
- /*String strContentType = servletRequest.getHeader("Content-Type");
- strContentType = strContentType!=null ? strContentType.toLowerCase():"xxx";
- String strContent = servletRequest.getHeader("Content"); //经测试发现ios只能设置Content
- strContent = strContent!=null ? strContent.toLowerCase():"xxx";
- String strCompare = TokenAuthenticationService.HEADER_CONTENT_TYPE;
- strCompare = strCompare.toLowerCase();
- String strShortCompare = TokenAuthenticationService.HEADER_SHORT_CONTENT_TYPE;
- strShortCompare = strShortCompare.toLowerCase();
- if (!strContentType.contains(strCompare)
- && !strContentType.contains(strShortCompare)
- && !strContent.contains(strCompare)
- && !strContent.contains(strShortCompare)){
- oRes = ResponseCode.STATUS_INVALID_CONTENT_TYPE;
- }else {
- oRes = ResponseCode.RESULT_NORMAL;
- }*/
- return oRes;
- }
- }
|