AbstractProxyServlet.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.shkpr.service.proxycenter.components;
  2. import com.shkpr.service.proxycenter.commtools.HttpTool;
  3. import com.shkpr.service.proxycenter.constants.ApiURI;
  4. import com.shkpr.service.proxycenter.controllerfilter.TokenAuthenticationService;
  5. import com.shkpr.service.proxycenter.dto.ResponseCode;
  6. import org.apache.http.client.HttpClient;
  7. import org.apache.http.client.utils.URIUtils;
  8. import org.apache.http.conn.ssl.NoopHostnameVerifier;
  9. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  10. import org.apache.http.impl.client.HttpClientBuilder;
  11. import org.mitre.dsmiley.httpproxy.ProxyServlet;
  12. import javax.net.ssl.SSLContext;
  13. import javax.net.ssl.X509TrustManager;
  14. import javax.servlet.ServletException;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. import java.io.IOException;
  18. import java.net.URI;
  19. import java.net.URISyntaxException;
  20. import java.security.SecureRandom;
  21. import java.security.cert.CertificateException;
  22. import java.security.cert.X509Certificate;
  23. public abstract class AbstractProxyServlet extends ProxyServlet {
  24. private String apiProxy = "https://127.0.0.1:9000/";
  25. public AbstractProxyServlet(String apiProxy) {
  26. this.apiProxy = apiProxy;
  27. }
  28. public AbstractProxyServlet() {
  29. }
  30. @Override
  31. protected HttpClient createHttpClient() {
  32. HttpClientBuilder clientBuilder = HttpClientBuilder.create().
  33. setDefaultRequestConfig(this.buildRequestConfig()).
  34. setDefaultSocketConfig(this.buildSocketConfig());
  35. clientBuilder.setMaxConnTotal(this.maxConnections);
  36. clientBuilder.setMaxConnTotal(maxConnections);
  37. if (this.useSystemProperties) {
  38. clientBuilder = clientBuilder.useSystemProperties();
  39. }
  40. SSLContext sslContext = null;
  41. try {
  42. sslContext = SSLContext.getInstance("TLS");sslContext.init(null, new X509TrustManager[]{new X509TrustManager() {
  43. public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  44. }
  45. public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  46. }
  47. public X509Certificate[] getAcceptedIssuers() {
  48. return new X509Certificate[0];
  49. }
  50. }}, new SecureRandom());
  51. }catch (Exception e){}
  52. if (sslContext != null){
  53. SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
  54. clientBuilder.setSSLSocketFactory(sslSocketFactory);
  55. }
  56. return clientBuilder.build();
  57. }
  58. @Override
  59. protected void service(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException {
  60. ResponseCode headerCheck = checkHeader(servletRequest, servletResponse);
  61. if (headerCheck != ResponseCode.RESULT_NORMAL) {
  62. HttpTool.handlerHttpErrorStatus(servletResponse, headerCheck);
  63. return;
  64. }
  65. final String destUri = servletRequest.getRequestURI();
  66. servletRequest.setAttribute(ATTR_TARGET_URI, null);
  67. if (destUri.startsWith(ApiURI.URI_BASE_PROXY_H)){
  68. //若不重置super.targetUri;则super.targetUri实际地址为【/data-gw/3th/dma-proxy/*】中*号匹配的部分
  69. //若重置super.targetUri=XXX; 则super.targetUri实际地址为XXX +【/data-gw/3th/dma-proxy/*】中*号匹配的部分
  70. super.targetUri = ApiURI.URI_BASE_PROXY_H;
  71. }else if (destUri.startsWith(ApiURI.URI_TASK_PROXY_H)){
  72. super.targetUri = ApiURI.URI_TASK_PROXY_H;
  73. }else if (destUri.startsWith(ApiURI.URI_ANALY_PROXY_H)){
  74. //nothing
  75. }else if (destUri.startsWith(ApiURI.URI_PUSH_PROXY_H)){
  76. super.targetUri = ApiURI.URI_PUSH_PROXY_H;
  77. }else if (destUri.startsWith(ApiURI.URI_IOT_STATS_PROXY_H)){
  78. super.targetUri = ApiURI.URI_IOT_STATS_PROXY_H;
  79. }else if (destUri.startsWith(ApiURI.URI_IOT_STATS_OLD_PROXY_H)){
  80. super.targetUri = ApiURI.URI_IOT_STATS_OLD_PROXY_H;
  81. }else if (destUri.startsWith(ApiURI.URI_GIS_AE_PROXY_H)){
  82. super.targetUri = ApiURI.URI_GIS_AE_PROXY_H;
  83. }else if (destUri.startsWith(ApiURI.URI_DATE_GW_PROXY_H)){
  84. super.targetUri = ApiURI.URI_DATE_GW_PROXY_H;
  85. }else if (destUri.startsWith(ApiURI.URI_AI_MODEL_PROXY_H)){
  86. super.targetUri = ApiURI.URI_AI_MODEL_PROXY_H;
  87. }
  88. URI uri = null;
  89. try {
  90. uri = new URI(apiProxy);
  91. } catch (URISyntaxException e) {
  92. e.printStackTrace();
  93. }
  94. servletRequest.setAttribute(ATTR_TARGET_HOST, null);
  95. super.targetHost = URIUtils.extractHost(uri);
  96. super.service(servletRequest, servletResponse);
  97. }
  98. protected ResponseCode checkHeader(HttpServletRequest servletRequest, HttpServletResponse servletResponse){
  99. ResponseCode oRes = ResponseCode.RESULT_NORMAL;
  100. /*String strContentType = servletRequest.getHeader("Content-Type");
  101. strContentType = strContentType!=null ? strContentType.toLowerCase():"xxx";
  102. String strContent = servletRequest.getHeader("Content"); //经测试发现ios只能设置Content
  103. strContent = strContent!=null ? strContent.toLowerCase():"xxx";
  104. String strCompare = TokenAuthenticationService.HEADER_CONTENT_TYPE;
  105. strCompare = strCompare.toLowerCase();
  106. String strShortCompare = TokenAuthenticationService.HEADER_SHORT_CONTENT_TYPE;
  107. strShortCompare = strShortCompare.toLowerCase();
  108. if (!strContentType.contains(strCompare)
  109. && !strContentType.contains(strShortCompare)
  110. && !strContent.contains(strCompare)
  111. && !strContent.contains(strShortCompare)){
  112. oRes = ResponseCode.STATUS_INVALID_CONTENT_TYPE;
  113. }else {
  114. oRes = ResponseCode.RESULT_NORMAL;
  115. }*/
  116. return oRes;
  117. }
  118. }