⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proxiedrequestdispatcher.java

📁 这是linux下ssl vpn的实现程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                           val = connectionURL.getHost();
                       } else {
                           val = connectionURL.getHost() + ":" + connectionURL.getPort();
                       }
                   } else if (hdr.equalsIgnoreCase(HttpConstants.HDR_COOKIE)) {
                       // We shouldnt supply our local cookies
                	   if (log.isDebugEnabled())
                		   log.debug(" Splitting cookie " + val);
                       String[] cookieVals = val.split("\\;");
                       StringBuffer newVal = new StringBuffer();
                       for (int i = 0; i < cookieVals.length; i++) {
                    	   if (log.isDebugEnabled())
                    		   log.debug("Cookie = " + cookieVals[i]);
                           int idx = cookieVals[i].indexOf('=');
                           String cn = Util.trimBoth(cookieVals[i].substring(0, idx));
                           String cv = Util.trimBoth(cookieVals[i].substring(idx + 1));
                           if (cn.equals("webForward") || cn.equals("logonTicket") || cn.equals("domainLogonTicket")
                                           || (cn.equals(sessionIdCookieName) && cv.equals(requestProcessor.getSession().getId()))) {
                        	   if (log.isDebugEnabled())
                        		   log.debug("  Omiting cookie " + cn + "=" + cv);
                           } else {

                               // TODO is it ok to store the cookie map in
                               // memory?
                               CookieItem cookie = cookieMap.getByFakeCookieName(cn);
                               if (cookie == null) {
                            	   if (log.isDebugEnabled())
                            		   log.debug("  Cookie " + cn + " unmapped, ignoring");
                                   // Un-mapped cookie, ignore
                               } else {
                            	   if (log.isDebugEnabled())
                            		   log.debug("  Including cookie " + cn + "=" + cv);
                                   if (newVal.length() > 0) {
                                       newVal.append("; ");
                                   }
                                   newVal.append(cookie.getRealCookieName());
                                   newVal.append("=");
                                   newVal.append(Util.urlDecode(cv));
                               }
                           }
                       }
                       if (newVal.length() == 0) {
                    	   if (log.isDebugEnabled())
                    		   log.debug("Send no cookies");
                           val = null;
                       } else {
                           val = newVal.toString();
                           if (log.isDebugEnabled())
                        	   log.debug("Using cooking val of " + val);
                       }
                   }
                   //	Change the refererer
                   else if (hdr.equalsIgnoreCase(HttpConstants.HDR_REFERER)) {
                       try {
                           URL refUrl = new URL(val);
                           refUrl.getQuery();
                           if (log.isDebugEnabled())
                        	   log.debug("Splitting refererer query string [" + val + "] " + refUrl.getQuery());
                           if (refUrl.getQuery() != null) {
                               String[] refParms = refUrl.getQuery().split("&");
                               String sslexUrlRef = null;
                               String destUrlRef = null;
                               for (int i = 0; i < refParms.length; i++) {
                                   //System.err.println("Refparms[" + i +
                                   // "]=" + refParms[i]);
                                   if (refParms[i].startsWith("sslex_url=")) {
                                       sslexUrlRef = Util.urlDecode(refParms[i].substring(10));
                                   } else if (refParms[i].startsWith("dest_url=")) {
                                       destUrlRef = Util.urlDecode(refParms[i].substring(9));
                                   }
                               }
                               if (sslexUrlRef != null) {
                                   val = Util.urlDecode(sslexUrlRef);
                                   if (log.isDebugEnabled())
                                	   log.debug("Changed referer to " + val);
                               } else if (destUrlRef != null) {
                                   val = Util.urlDecode(destUrlRef);
                                   if (log.isDebugEnabled())
                                	   log.debug("Changed referer to " + val);
                               } else {
                                   val = requestProcessor.getWebForward().getDestinationURL();
                               }
                           }
                       } catch (MalformedURLException murle) {

                       }
                   } else if(hdr.equalsIgnoreCase(HttpConstants.HDR_CONTENT_LENGTH)) {
                       contentLength = Integer.parseInt(val);
                       continue;
                   } else if(hdr.equalsIgnoreCase(HttpConstants.HDR_CONNECTION)) {
                       // Handled by the Maverick HTTP client
                       continue;
                   }

                   if (val != null) {
                       method.getProxiedRequest().setHeaderField(hdr, val);
                   }

                   if (log.isDebugEnabled())
                	   log.debug("Adding request property " + hdr + " = " + val);
               }
            }
       }

        if ("application/x-www-form-urlencoded".equals(requestProcessor.getHeader(HttpConstants.HDR_CONTENT_TYPE))) {
            content = requestProcessor.getParametersAsFormEncodedString().getBytes();
            if (log.isDebugEnabled())
            	log.debug("application/x-www-form-urlencoded so sending content of '" + new String(content) + " length of "
                            + content.length);
            method.getProxiedRequest().setHeaderField(HttpConstants.HDR_CONTENT_LENGTH, String.valueOf(content.length));
        } else if (requestProcessor.getRequestParameters().isFormData()) {
        	if (log.isDebugEnabled())
        		log.debug("form-data so sending length of " + requestProcessor.getRequestParameters().getFormDataLength());
            method.getProxiedRequest().setHeaderField(HttpConstants.HDR_CONTENT_LENGTH, String.valueOf(
                    requestProcessor.getRequestParameters().getFormDataLength()));
        }

        // Proxy headers
        method.getProxiedRequest().setHeaderField("Via", "SSL Explorer");


        // Execute the request asynchronously

        /**
         * Perform the connection
         */
        if (log.isDebugEnabled())
        	log.debug("Connecting to "
                  + client.getHost()
                  + ":"
                  + client.getPort()
                  + " (Secure = "
                  + client.isSecure()
                  + ")");

        HttpConnection connection =  client.executeAsync(method);


        try {

            // Send the content if any
            if (requestProcessor.getRequestParameters().isFormData()) {

                InputStream in = requestProcessor.getRequestParameters().getFormData();
                try {
                    serverOut = connection.getOutputStream();
                    FileHelper.copy(in, serverOut);
                    serverOut.flush();
                } finally {
                    Util.closeStream(in);
                }
            } else {
                if (contentLength > 0 && content!=null) {
                	if (log.isDebugEnabled())
                		log.debug("Has content, so setting doOutput to true and writing content to stream");
                    serverOut = connection.getOutputStream();
                    serverOut.write(content);
                    serverOut.flush();
                }
            }

            serverResponse = new HttpResponse(connection);
            responseCode = serverResponse.getStatus();
            responseMessage = serverResponse.getReason();
        } catch (Exception ex) {
            log.error("Failed to contact proxied host.", ex);
            responseCode = HttpConstants.RESP_503_SERVICE_UNAVAILABLE;
            responseMessage =  ex.getMessage();
            return false;
        }

        // handler status codes etc.
        /*responseCode = HttpConstants.RESP_500_INTERNAL_SERVER_ERROR;
        responseMessage = "Internal Server Error";
        if (http != null) {
            if (log.isDebugEnabled())
            	log.debug("Waiting to response code");
            responseCode = http.getResponseCode();
            responseMessage = http.getResponseMessage();
            serverIn = http.getErrorStream();
        }

        if (serverIn == null) {
            try {
                serverIn = connection.getInputStream();
            } catch (Exception ex) {
                log.error("Ignored exception.", ex);
                serverIn = http.getErrorStream();
            }
        }*/
        return true;
    }

    public int getResponseCode() {
        return responseCode;
    }

    public HttpResponse getServerResponse() {
        return serverResponse;
    }

    public String getResponseMessage() {
        return responseMessage;
    }

    /*public InputStream getProxiedInputStream() {
        return serverIn;
    }*/

    /**
     * @return
     */
    /*public URLConnection getConnection() {
        return connection;
    }*/

    /**
     * @return
     */
    public URL getConnectionURL() {
        return connectionURL;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -