📄 proxiedrequestdispatcher.java
字号:
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 + -