`
namezhou
  • 浏览: 158701 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用泛解析和Filter实现动态二级域名

 
阅读更多

itEye等网站有个很不错的机制,就是每个用户都有一个永久的二级域名 正好所在的项目也想实现这样的功能,研究了一下,发现用过滤器实现最简单,

http://7784.namezhou.com 实际打开的是 http://www.namezhou.com/7784

步骤如下:

 

1.去DNS供应商开启泛解析,就是加一条cname记录*.namezhou.com 指向www.namezhou.com

2.编写一个Filter,当检测到是二级域名xxx.namezhou.com时,把地址跳转成http://www.namezhou.com/xxx

代码如下:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 泛域名解析过滤器
 * @author namezhou
 * @since Dec 26, 2015
 */
public class DomainFilter implements Filter{
	private String mainDomain;//主域名裸域地址
	private String expectDomain;//排除域名,分号隔开
	public String getMainDomain() {
		return mainDomain;
	}
	public void setMainDomain(String mainDomain) {
		this.mainDomain = mainDomain;
	}
	public String getExpectDomain() {
		return expectDomain;
	}
	public void setExpectDomain(String expectDomain) {
		this.expectDomain = expectDomain;
	}
	@Override
	public void destroy() {
		
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		String url = ((HttpServletRequest)request).getRequestURI();
		String host = request.getServerName();
		boolean redirect = false;
		if(host.equals(mainDomain)){
			//访问的裸域
			chain.doFilter(request, response);
		}else if(expectDomain!=null&&expectDomain.trim().length()>0){
			String[] arr = expectDomain.split(";");
			if(arr!=null&&arr.length>0){
				for (int i = 0; i < arr.length; i++) {
					if(host.equals(arr[i]+"."+mainDomain)){
						//排除的域,直接显示
						redirect = true;
						chain.doFilter(request, response);
					}
				}
			}
		}
		if(!redirect){
			//检查是不是有
			String id = host.replace("."+mainDomain, "");
			((HttpServletResponse)response).sendRedirect("http://www.namezhou.com/"+id);
		}
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		expectDomain = arg0.getInitParameter("expectDomain");
		mainDomain = arg0.getInitParameter("mainDomain");
	}
}

 3.配置该Filter

<!-- 泛域名解析过滤器 start -->
	<filter>
		<filter-name>domainFilter</filter-name>
		<filter-class>com.namezhou.common.filter.DomainFilter</filter-class>
		<init-param>
			<param-name>mainDomain</param-name>
			<param-value>namezhou.com</param-value>
		</init-param>
		<init-param>
			<param-name>expectDomain</param-name>
			<param-value>www;dev</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>domainFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 泛域名解析过滤器 end -->

 

博客里面还有另外一种基于Apache rewrite模块的实现方法,与那种方法比较起来,过滤器实现方式

优点:简单,逻辑清晰,实现方便,

缺点:访问地址会变,当然也可以弄一个空iframe页面,去嵌入需要显示的页面,但略显山寨

分享到:
评论

相关推荐

    java实现泛域名解析

    Java 实现泛域名解析 泛域名解析是指利用...Java 实现泛域名解析可以通过修改 DispatcherServlet 和通过 Filter 实现两种方式,通过 Filter 实现泛域名解析的方式相对简单,入侵相对小点,可以满足一般人的需求。

    IIRF+IIS6.0动态二级域名

    结合IIS6.0,它可以实现动态二级域名的灵活绑定,为网站管理和多站点托管提供便利。 #### 描述解析:“自己整理的文档,很好用的二级域名动态绑定,包看包会~!” 描述部分简明扼要地介绍了文档的价值和实用性,...

    2021-2022计算机二级等级考试试题及答案No.11409.docx

    ### 计算机二级等级考试知识点解析 #### 1. Word文档中查找关键词 - **知识点**: 在Word文档中查找关键词的功能通常通过【编辑】菜单中的“查找”命令实现。此功能可以帮助用户快速定位到文档中包含指定关键词的...

    PHP实现通过URL提取根域名

    PHP实现通过URL提取根域名主要涉及到解析URL字符串并从中提取出域名部分,通常指顶级域名和二级域名。实现这一功能,我们可以使用PHP内置的字符串处理函数和正则表达式。本文将详细探讨在PHP中如何实现这一功能以及...

    2021-2022计算机二级等级考试试题及答案No.9201.docx

    计算机二级等级考试主要涵盖计算机基础知识、编程语言、数据库管理、操作系统、网络技术等多个方面的知识。以下是对题目中涉及知识点的详细解析: 1. `RandomAccessFile` 是Java中的类,用于处理大文件,支持随机...

    2021-2022计算机二级等级考试试题及答案No.12767.docx

    【计算机二级考试题】计算机二级等级考试主要考察考生对计算机基础知识和基本技能的掌握程度,包括数据处理、网络知识、数据库原理以及编程语言的应用等。以下是相关知识点的详细解释: 1. 数据库相关:在数据库中...

    2021-2022计算机二级等级考试试题及答案No.11984.docx

    ### 计算机二级等级考试知识点解析 #### 数据表设计视图中的数据类型 - **题目解析**:在数据表的设计视图中,常见的数据类型包括文本(Text)、数字(Number)、日期/时间(Date/Time)等。题目询问的是哪些选项不是数据...

    2021-2022计算机二级等级考试试题及答案No.4325.docx

    计算机二级等级考试主要涵盖计算机基础知识、数据库操作、编程语言、软件工程、网络技术等多个方面的内容。以下是根据题目中给出的部分内容解析的相关知识点: 1. **关系模型**:关系模型是数据库管理系统中最常用...

    tcpdump 源代码分析

    `变量的声明,表明了TCPdump利用Berkeley Packet Filter (BPF)语言进行数据包过滤的机制。 #### 五、总结 通过深入分析TCPdump 4.0.0版本的源代码,我们不仅能够理解其如何高效地捕获、解析和筛选网络数据包,还能...

    2021-2022计算机二级等级考试试题及答案No.11336.docx

    根据给定文件的信息,我们可以总结出一系列与计算机二级等级考试相关的知识点,具体如下: ### 1. 栈的概念与操作 - **栈的基本定义**:栈是一种特殊的线性表,其特点是只允许在一端(称为栈顶)进行插入或删除...

    2021-2022计算机二级等级考试试题及答案No.11718.docx

    13. 文件列表框过滤:在编程中,如果希望文件列表框只显示可执行文件,需要设置Filter属性来指定文件类型过滤。正确答案是B。 14. 剪贴板操作:在Windows中,连续剪切操作后,剪贴板中会保留最后一次剪切的内容。...

    分布式高并发.pdf

    本文档主要介绍了分布式高并发系统的设计和实现,涵盖了大型网站系统的特点、架构演化、微服务、缓存、消息队列、搜索引擎、数据库架构、分布式事务、限流算法、负载均衡、一致性Hash算法、数据库设计规范、索引、...

    大厂面试系列二.pdf

    可以使用哈希表来实现,以域名或IP为关键字,以DNS解析结果为值。为了满足每秒5000以上的查询,需要优化哈希函数,减少冲突,并可能需要多级哈希或使用Bloom Filter等技术。 在海量日志数据中提取出某日访问百度...

    unix网络编程中文全两卷及例子代码

    3. **套接字选项和定时器**:详细讲解了套接字选项的设置和使用,以及如何利用定时器实现超时控制。 4. **名字和地址转换**:解释了DNS(域名系统)的工作原理,以及gethostbyname和getaddrinfo等函数的使用。 5. ...

    php代码-解析url

    - **host**:URL指向的主机名,可能包括二级域名和顶级域名。 - **port**:服务器端口号,默认为`80`(HTTP)或`443`(HTTPS),如果在URL中指定,则会显示。 - **user**和**pass**:如果URL包含身份验证信息,...

    LDAP认证过程内附抓包

    #### 二、LDAP认证过程步骤解析 **1. 客户端发送绑定请求** 客户端首先向LDAP服务器发起绑定请求,这个请求可以是匿名绑定或者指定用户的绑定。在这个例子中,客户端使用了默认用户进行绑定,即管理员账户。 - **...

    Postfix配置详解

    通过`content_filter`参数,可以自定义邮件过滤规则,实现更复杂的邮件处理逻辑。 #### 3. 优化性能 为了提高邮件处理速度,可以调整队列大小、线程数量、内存使用等参数,优化Postfix的性能表现。 通过以上对...

    Jetty权威指南.pdf

    配置JNDI通常需要指定数据源的名称和实现类,例如: ```xml &lt;Arg&gt;jdbc/myDS &lt;Arg&gt;org.apache.commons.dbcp.BasicDataSource &lt;Set name="url"&gt;jdbc:mysql://localhost:3306/mydb &lt;Set name="username"&gt;root...

    中级程序员必备面试题.txt

    ### 中级程序员必备面试题解析 #### 如何创建一个有序集合 有序集合通常是通过`TreeSet`或`LinkedHashSet`等类实现。`TreeSet`基于红黑树存储元素,可以保证元素的自然排序;而`LinkedHashSet`则是基于哈希表与...

    summary:知识点总结

    5. 域名解析与DNS:域名到IP的转换过程。 6. 浏览器存储:Cookie、LocalStorage、SessionStorage、IndexedDB,以及它们的用途和限制。 7. 浏览器渲染过程:解析HTML、CSS,构建DOM树和CSSOM树,合成帧,发送到GPU...

Global site tag (gtag.js) - Google Analytics