1 nds 泛域名解析 :CNAME * 默認java
package cn.com.platform.filter; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; /** * * * [@author](http://my.oschina.net/arthor) linwk 2016年8月1日 * */ @Component public class DomainFielter extends OncePerRequestFilter { private static final String DOMAIN = "xxx.com"; private static final String SEP = "/"; // 一些不須要配置的二級域名 先後都加逗號 直接字符判斷不用轉成數組 private static final String EXCEPT_DOMAIN = ",manage,test,"; @Override public void destroy() { // TODO Auto-generated method stub } /** * 域名管理設置cname *指向根域名 C:/WINDOWS/system32/drivers/etc/hosts文件中增長 127.0.0.1 * xxx.com index.xxx.com jc.xxx.com test.xxx.com */ @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String domainName = ""; String serverName = request.getServerName(); String path = request.getRequestURI(); int end = serverName.indexOf(DOMAIN); if (end != -1 && end != 0) { domainName = serverName.substring(0, end - 1); } else { domainName = "www"; } // 是資源的數據,不進行域名轉換 或者 在EXCEPT_DOMAIN裏面的不須要轉換 if (StringUtils.indexOf(path, "assets") > -1 || StringUtils.indexOf(EXCEPT_DOMAIN, "," + domainName + ",") > -1) { filterChain.doFilter(request, response); return; } // http://username.test.com/article/1633 String distPage = getDistPage(path); String id = getId(path); if (domainName != null && !"".equals(domainName) && !"www".equals(domainName)) { // http://blog.test.com/article/1633 ==> // http://www.test.com/blog/article.htm?id=1633 if (id != null && !id.equals("")) { request.getRequestDispatcher(SEP + domainName + SEP + distPage + ".htm" + "?id=" + id).forward(request, response); return; } else { // http://blog.test.com ==> http://www.test.com/blog/ request.getRequestDispatcher(SEP + domainName + SEP).forward(request, response); return; } } filterChain.doFilter(request, response); } private static String getDistPage(String path) { if (path == null && "".equals(path)) { return null; } String args[] = path.split("/"); if (args.length < 3) { return null; } return args[1]; } private static String getId(String path) { if (path == null && "".equals(path)) { return null; } String args[] = path.split("/"); if (args.length < 3) { return null; } return args[2]; } public static void main(String[] args) { System.out.println(DomainFielter.getId("/article/1533")); } }
配置:web.xml <!-- 域名Filter 定義 --> <filter> <filter-name>domainFielter</filter-name> <filter-class>cn.com.xxx.filter.DomainFielter</filter-class> <init-param> <param-name>targetBeanName</param-name> <param-value>domainFielter</param-value> </init-param> </filter> <filter-mapping> <filter-name>domainFielter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>web
效果: 訪問http://jc.xxx.com/ 等同於http://www.xxx.com/jcspring