`
zhxmyself
  • 浏览: 40670 次
  • 来自: ...
社区版块
存档分类
最新评论

应用泛域名解析和java的filter实现对三级域名解析

    博客分类:
  • java
阅读更多
需求:
    为每个在www.ecicc.oom注册商家提供一个三级域名,三级域名直接指向商家自己的主页面,三级域名的组成方式为:注册名称.ecicc.com
    商家又分为产业集群用户和专业市场用户,这两种用户的应用是不同的,分别对应企业展厅和专业网店。
    对于产业集群用户来说,企业展厅的连接构造为:http://www.ecicc.com/web/用户名
    网店暂未实现

设计:
    通过泛域名解析,让http://*.ecicc.com指向www.ecicc.com,把服务器配置成支持泛域名。
    通过java filter获取访问的域名,截取域名中的三级域名。根据不同的三级域名重定向到相应用户。
    如:用户在地址栏中输入:http://csic220.ecicc.com,用filter截取csic220,重新定向为http://www.ecicc.com/web/csic220

程序代码如下:
web.xml文件
	<filter>
	    <filter-name>URLFilter</filter-name>
	    <filter-class>com.csic99.common.tools.URLFilter</filter-class>
	</filter>
	<filter-mapping>
	  <filter-name>URLFilter</filter-name>
	  <url-pattern>/*</url-pattern>
	</filter-mapping>

java文件
package com.csic99.common.tools;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.csic99.area.AcDirectionManager;
import com.csic99.product.UmUserManager;
import com.csic99.product.pojo.AcDirection;
import com.csic99.product.pojo.UmUser;
/**
 * 域名访问站点的重新定位
 * 必须在服务器上已经配置好泛域名解析,
 * 即http://*.ecicc.com是有效连接,它指定到www.ecicc.com
 * 
 * @author zhx
 *
 */
public class URLFilter implements Filter{
	
	private static
	AbstractApplicationContext appContext = new 
	ClassPathXmlApplicationContext("applicationContext-manager.xml");

	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		 HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		 HttpServletResponse httpServletResponse = (HttpServletResponse) response;
		//判断是否是三级域,如http://csic220.ecicc.com
		//获取域名
		String serverName = request.getServerName();
		//判断是否是三级域名
			int end = serverName.indexOf("ecicc.com");
			String userName = "";
			//获取用户名
			if(end!= -1&&end!=0){
				userName = serverName.substring(0, end-1);
			}else{
				end = serverName.indexOf("csic99.com");
				if(end!=-1&&end!=0){
					userName = serverName.substring(0, end-1);
				}
			}
			//用户名不为空
			if(userName!=null&&!"".equals(userName)){
				//重定位的url
				String url = "";
				//获取用户管理对象
				UmUserManager umUserManager =(UmUserManager) appContext.getBean("UmUserManager");
				UmUser umUser = umUserManager.findUmUserByLoginName(userName);
				if(umUser!=null){
					AcDirectionManager acDirectionManager = 
						(AcDirectionManager)appContext.getBean("AcDirectionManager");
					AcDirection acDirection = 
						acDirectionManager.findAcDirectionByUserId(umUser.getUserId());
					//判断用户类型
					//如果是产业集群用户
					if("1".equals(acDirection.getDirectionId())){
						url = "http://www.ecicc.com/web/"+umUser.getLoginName();
					}//专业市场用户
					else if("2".equals(acDirection.getDirectionId())){
						//暂时从定位到ecicc.com
						url = "http://www.ecicc.com";
					}
				}//输入的是不存在的三级域名
				else{
					url="http://www.ecicc.com";
				}
				//System.out.println(url);
				httpServletResponse.sendRedirect(url);
				return;		
		}
		chain.doFilter(request, response);
		
	}

	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}



}


  
分享到:
评论

相关推荐

    java实现泛域名解析

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

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

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

    Jetty权威指南.pdf

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

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

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

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

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

    ELK日志分析系统

    为了搭建ELK栈,需要在两个节点上配置域名解析。下面是一个示例配置: - **Node1 节点设置**: ```bash [root@node1 ~]# vi /etc/hosts 192.168.8.134 node1 192.168.8.136 node2 ``` - **Node2 节点设置**: ...

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

    以下是对题目中涉及知识点的详细解析: 1. `RandomAccessFile` 是Java中的类,用于处理大文件,支持随机访问。创建 `RandomAccessFile` 对象时,需要指定文件路径和访问模式,"r"代表读取,"w"代表写入,"rw"代表...

    Jquery+Struts2+JSON处理

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。这三者结合可以实现高效的数据交互和动态页面更新。 1. **jQuery与AJAX** jQuery简化了原生...

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

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

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

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

Global site tag (gtag.js) - Google Analytics