All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.logicbus.backend.ProxyNormalizer Maven / Gradle / Ivy

There is a newer version: 1.6.16
Show newest version
package com.logicbus.backend;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.anysoft.util.Properties;
import com.anysoft.util.PropertiesConstants;
import com.logicbus.models.catalog.Path;

/**
 * 代理地址的标准化
 * 
* 负责将代理地址标准化,代理请求定向到固定的代理服务上。 *
* 代理地址的语法为: *
* http://[:]/proxy/<实际服务器IP>[:<实际服务器端口>]/<服务名>?<服务参数> * * @author duanyy * * @since 1.2.7.2 * @version 1.6.4.4 [20150910 duanyy]
* - 缺省的代理服务的路径调整为/core/util/Proxy
* * @version 1.6.5.8 [20160601 duanyy]
* - Proxy支持web应用的Context路径
* * @version 1.6.7.9 [20170201 duanyy]
* - 采用SLF4j日志框架输出日志
*/ public class ProxyNormalizer implements Normalizer { protected String proxyServiceId = "/core/util/Proxy"; protected Logger logger = LoggerFactory.getLogger(ProxyNormalizer.class); public ProxyNormalizer(Properties p){ proxyServiceId = PropertiesConstants.getString(p, "normalizer.proxy.id", proxyServiceId); } public Path normalize(Context ctx, HttpServletRequest request) { String path = request.getPathInfo(); String queryString = request.getQueryString(); String host = null; String svc = null; if (path != null && path.length() > 0){ int pos = findPos(path); host = path.substring(0,pos); host = trimSlash(host); svc = path.substring(pos); } if (host != null && host.length() > 0){ int index = host.indexOf("$"); if (index >= 0){ String contextPath = host.substring(index + 1); ctx.SetValue("contexPath", contextPath); host = host.substring(0, index); } ctx.SetValue("host", host); } if (svc != null && svc.length() > 0){ ctx.SetValue("service", svc); } if (queryString != null && queryString.length() > 0 ){ ctx.SetValue("query", queryString); } return new Path(proxyServiceId); } static private String trimSlash(String str){ int length = str.length(); int start = 0; for (int i = 0 ;i < length ; i ++){ if (str.charAt(i) != '/'){ start = i; break; } } int end = length - 1; for (int i = length - 1; i >= 0 ; i --){ if(str.charAt(i) != '/'){ end = i; break; } } if (end > start){ return str.substring(start,end + 1); }else{ return ""; } } static private int findPos(String path){ int length = path.length(); int found = -1; boolean inSlash = true; for (int i = 0 ; i < length ; i ++){ if (inSlash){ if (path.charAt(i) != '/'){ inSlash = false; } }else{ if (path.charAt(i) == '/'){ found = i; break; } } } if (found < 0){ found = path.length(); } return found; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy