二级域名的java实现

Java的实现二级域名访问卖家首页 在电子商务平台中,卖家在平台上可以开自己的店铺,然后买家就可以直接进入到卖家的店铺进行购物.那么问题来了,买家通过什么样的入口进入卖家的店铺? 阅读详情
 
涉及到为用户提供一个二级域名功能,实现方法如下:

(1)首先要在域名服务商端做一个泛域名解析. 我用的是godaddy.com,就新建一个A记录(host=*,point to指向我的服务器的ip),这样所有二级域名都会转到我的服务器来了

(2)接着在web.xml配一个自已写的域名过滤器,

<filter>

<filter-name>URLFilter</filter-name>

<filter-class>com.yowob.commons.URLFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>URLFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

过滤器的代码如下。这里先将二级域名和全球域名和用户ID的映射,保存在一个数据表里, 然后访问进来时对地址做一个判断, 再取出对应的用户ID. 再转一下就行了. 我的静态文件都在static目录,所以还加了一个static的判断。

比如: http://time.you.com/board/21 用time对应用户ID为6,则访问效果有 http://www.you.com/6/board/21相同, 不过地址栏还是显示http://time.you.com/board/21。

再比如:htttp://www.userdomain.com/board/21,这个是用户ID为6的全球域名,访问效果也和上面一样。

package com.yowob.commons;

import java.io.IOException;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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 org.apache.commons.lang.StringUtils;

import org.apache.commons.lang.math.NumberUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import com.yowob.Constants;

import com.yowob.dao.SiteDAO;

import com.yowob.dto.SiteDTO;

public class URLFilter implements Filter {

private static final Log log = LogFactory.getLog(URLFilter.class);

private static final String DOMAIN_END = “.” + Constants.DOMAIN; //.you.com

private static final Map<String, Long> NAME_MAP = new HashMap<String, Long>();

private static final Map<String, Long> DOMAIN_MAP = new HashMap<String, Long>();

@Override

public void init(FilterConfig filterConfig) throws ServletException {

log.info(“——————————init”);

SiteDAO siteDAO = new SiteDAO();

List<SiteDTO> list = siteDAO.getAll();

for (SiteDTO siteDTO : list) {

String name = siteDTO.getName();

if (StringUtils.isNotEmpty(name)) {

NAME_MAP.put(name, siteDTO.getId());

}

String domain = siteDTO.getDomain();

if (StringUtils.isNotEmpty(domain)) {

DOMAIN_MAP.put(domain, siteDTO.getId());

}

}

}

public static void updateName(String oldValue, String newValue, Long siteId) {

if (StringUtils.equals(oldValue, newValue)) {

return;

}

if (StringUtils.isNotEmpty(oldValue)) {

NAME_MAP.remove(oldValue);

}

if (StringUtils.isNotEmpty(newValue)) {

NAME_MAP.put(newValue, siteId);

}

}

public static void updateDomain(String oldValue, String newValue, Long siteId) {

if (StringUtils.equals(oldValue, newValue)) {

return;

}

if (StringUtils.isNotEmpty(oldValue)) {

DOMAIN_MAP.remove(oldValue);

}

if (StringUtils.isNotEmpty(newValue)) {

DOMAIN_MAP.put(newValue, siteId);

}

}

@Override

public void destroy() {

log.info(“——————————destroy”);

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) servletRequest;

String requestURI = request.getRequestURI();

String serverName = request.getServerName().toLowerCase();

String realURI = getRealRequestURI(serverName, requestURI);

request.getRequestDispatcher(realURI).forward(request, response);

}

private String getRealRequestURI(String serverName, String requestURI) {

if (Constants.WWW_DOMAIN.equals(serverName) || requestURI.startsWith(“/static/”) || Constants.DOMAIN.equals(serverName)) {

return requestURI;

}

if (serverName.endsWith(DOMAIN_END)) {

String secondDomain = serverName.substring(0, serverName.indexOf(“.”));

//网站id

if (NumberUtils.isNumber(secondDomain))

return getURI(secondDomain, requestURI);

//网站英文名

Long siteId = NAME_MAP.get(secondDomain);

if (siteId == null) {

//保留的二级域名

if (Constants.isPrivateSecondDomain(secondDomain)) {

return requestURI;

}

return “/message?msg=不存在二级域名” + secondDomain;

// throw new RuntimeException(“do not exist second domain: ” + secondDomain);

}

return getURI(siteId + “”, requestURI);

}

//域名

Long siteId = DOMAIN_MAP.get(serverName);

if (siteId == null) {

return requestURI;

} else {

return getURI(siteId + “”, requestURI);

}

}

private static String getURI(String siteId, String requestURI) {

if (requestURI.equals(“/”)) {

return “/” + siteId;

} else {

return “/” + siteId + requestURI;

}

}

}

其他一些小技巧:

(1)为了便于本机测试,可以修改windows 的hosts文件。我的如下:

127.0.0.1 localhost

127.0.0.1 you.com

127.0.0.1 www.you.com

127.0.0.1 time1.you.com

127.0.0.1 time2.you.com

127.0.0.1 6.you.com

127.0.0.1 www.bobo.com


 

STM32学习笔记 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发 系列文章目录 一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 文章目录系列文章目录前言一、配置CubeMX二、逻辑代码部分 前言 这次我用的板子是一个用STM32F103C8T6作为主控芯片的一个数据采集卡,两个LED灯连接的引脚是PB3与PB4,TX与RX引脚分别是PA9和PA10。 一、配置CubeMX 1、新建工程; 2、配置时钟源,在RCC里面的HSE配置的是晶振时钟; 3、配置程序烧录引脚SYS为SWD模式; 4、配置GPIO口,配置一个LE 阅读详情

相关推荐

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解

ith321的博客 7275

Java提取域名或URL中的一级域名二级域名......

【需求】     提取全域名中的一级域名信息、二级域名信息...... 信息,当然一级域名就相当于是根域名。     例如:abc.map.baidu.com 提取出一级域名(根域名): baidu.com                                                 提取出二级域名: map.baidu.com             

kuluzs 1万+

博流BL602开发二 环境搭建与固件烧录实战

本文详细介绍了博流BL602 RISC-V芯片开发环境的搭建与固件烧录全流程。从Linux/WSL系统选择、RISC-V工具链配置、SDK获取,到编译首个Wi-Fi示例并生成固件镜像,再到通过命令行或图形化工具完成烧录及串口测试,提供了完整的实战指南和常见问题解决方案。

weixin_29175469的博客 453

Java-通过IP地址获得域名和主机名

《JAVA开发实战1200》JAVA API 1.7

一个龙套而已 1万+

组态王|通过日历控件选择时间段查询历史报警

哈喽,你好啊,我是雷工!这节记录下查询历史报警信息的功能实现。以下为实现笔记。

做有价值的事,积累有价值的笔记! 3772

Python与西门子PLC数据交互实战:基于Snap7的跨平台工业通信指南

本文详细介绍了如何使用Python和Snap7库实现与西门子PLC的数据交互。内容涵盖跨平台环境搭建、连接参数配置、数据读写实战及性能优化技巧,为工业自动化、数据采集和智能制造场景提供了一套轻量、灵活且高效的通信解决方案。

vim8coder的博客 292

java子域名枚举工具_MassDNS DNS子域名查询枚举工具

MassDNS是一种简单的高性能DNS存根解析器,其目标读者是那些寻求解析数百万甚至数十亿数量级域名的人。无需特殊配置,MassDNS就能使用公开可用的解析器每秒解析超过350,000个名称。工具编译将git仓库克隆cd到项目根文件夹中。然后运行make从源代码构建。工具用法Usage: ./bin/massdns [options] [domainlist]-b –bindto ...

weixin_39606361的博客 482

华强北手表256G真相大揭秘:ADB命令实测内存与存储(附完整调试教程)

本文通过ADB命令实战揭秘华强北智能手表256G存储等硬件参数的真实性。文章提供了从开启调试模式到使用ADB命令查询系统属性、验证内存与存储容量的完整教程,帮助用户识别参数虚标,评估设备真实性能与潜在风险。

e3f4g5的博客 1241

简书 java二级,java提取二级域名

项目中用到了提取域名,参考了http://blog.youkuaiyun.com/kuluzs/article/details/51986759后并改进后,写出此工具类(test方法仅为方便测试,使用时可删除,可另建测试类)。import java.util.regex.Matcher;import java.util.regex.Pattern;/*** Created by terry on 2017/8...

weixin_32263265的博客 1559

Silvaco TCAD实战 | SiC MOSFET工艺仿真与关键参数DOE分析

本文详细介绍了使用Silvaco TCAD进行SiC MOSFET工艺仿真与关键参数DOE分析的实战方法。通过外延生长建模、离子注入工艺调试等步骤,结合DOE分析优化器件性能,帮助工程师在设计阶段预判电学特性,提升产品可靠性。文章还分享了网格划分、界面态建模等实用技巧,助力实现从仿真到产品的闭环验证。

weixin_30235225的博客 509

C#单例模式在工控上位机的实战应用:一台设备只连一次,稳定运行7×24小时

在工控行业,稳定性比功能更重要。一台上位机需要7×24小时运行,任何一次因资源冲突导致的停机,都可能给工厂带来巨大损失。单例模式的核心价值,就是通过保证资源唯一性,避免PLC连接冲突、串口占用、日志写入错乱等问题,为工控上位机的稳定运行保驾护航。按需使用:不是所有类都要单例,只有资源唯一性的类才用;线程安全:多线程场景下,必须用双重检查锁定或静态内部类写法;手动释放:单例类中的硬件资源(PLC、串口),程序退出时必须手动释放,避免资源泄漏。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 551

java设置二级域名_二级域名的java实现

packagecom.yowob.commons;importjava.io.IOException;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.Filte...

weixin_31519139的博客 1117

超详细教程YoloV8官方推荐免费数据集网站Roboflow一键导出Voc、COCO、Yolo、Csv等格式

YoloV8官方推荐了一个数据集网站,就是Roboflow。Roboflow是一个数据集管理平台,提供了免费的数据集,同时也支持上传自己的数据集进行格式转换。使用Roboflow,开发者可以方便地获取所需格式的数据集,无需手动转换格式。此外,Roboflow还提供了多种数据预处理、数据增强等功能,可帮助开发者更好地优化训练数据

Snu77的博客 2万+

java动态使用二级域名_MVC实现动态二级域名

public classDomainRoute : Route{privateRegex domainRegex;privateRegex pathRegex;public string Domain { get; set; }public DomainRoute(string domain, string url, RouteValueDictionary defaults): base(url...

weixin_42508114的博客 566

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JAVA+Netty根据二级域名实现多租户内网穿透功能【设计实践】

3、访客通过二级域名访问Nginx(c1.test.com),Nginx转发请求到服务端访客代理接口(16002端口),服务端监听到之后解析二级域名,获取客户端专用连接通道,创建访客ID,然后通过(server-client通道)向客户端发送指令,客户端接收指令后连接到真实服务端口(8080,可根据启动参数修改),连接真实服务成功后,客户端会重新向服务端建立一条连接(访客-server通道),服务端把访客和该通道进行绑定。这三步最终形成了(访客-Nginx-代理-客户端-真实服务)完整的通道。

殷长庆的博客 2413

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java tomcat 实现二级域名session共享(良心共享)

本文主要目的:一个用户在一台服务器的用户中心登录后产生的SESSION,然后访问在不同的服务器上的不同二级域名的应用都能共享到这个用户登录后的SESSION,可以说是单点登录。 用到的技术:J2E,Tomcat,Redis,Cookie 先阐述两个概念: 1)什么是一级域名和二级域名? 比如说你有一个域名是  aa.com  ,那么aa.com就是你这个域名的一级域名,www

guanqing527的专栏 6391

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

通过Filter实现二级域名和URLRewrite

转载于:http://firefly.iteye.com/blog/821715     需求1.1: 一级域名: http://www.iteye.com/ 二级域名: http://firefly.iteye.com/ 这里firefly其实会Mapping到用户ID,根据用户ID来展示不用用户的Blog,javaeye是通过Ruby实现的, 那Java如何实现这个Mapping呢

zgmzyr的专栏 1255

vue做二级域名java_二级域名的cookie顶级域名 享受不到。不经过后台,我想直接vue实现...

import Cookies from 'js-cookie'// cookie保存的天数import config from '@/config'import { forEach, hasOneOf, objEqual } from '@/libs/tools'const { title, cookieExpires, useI18n } = configexport const TOKEN_K...

weixin_32029863的博客 346

入门Nginx之-反向代理实现二级域名转发(1),2024年最新阿里巴巴java开发面试

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)

2401_84439835的博客 972

java设置cookie域名通配_使用cookie设置二级域名登录状态互通

​ 登录状态的实现是java生成一个token而后前端在发送请求时将token带入请求头去请求数据,若是token失效则没法返回。javascript在前端这里,咱们须要用本地存储将token暂时存起来,发送请求的时候再读取。对于vue项目,vuex在刷新的时候就会初始化。因此只能用浏览器存储方式才可让token一直存在。前端localstorage和session的区别为 页面关闭后locals...

weixin_35748610的博客 1573

solo安装 及通过nginx转发实现二级域名访问

最近看了一下一个开源博客的JAVA项目,部署完之后,按照官方文档中提到额nginx配置之后,不知为何跳转是失败的,后来经过一番折腾后,自己重新配置了nginx得以成功通过域名跳转到Tomcat服务器 环境要求: tomcat9以上 jdk1.8以上 1.放solo2.4.war包到tomcat下,启动 2.修改这个文件 3.修改数据库

levy-snail的博客 1023

值得收藏的网站,慢慢整理.

提供jquery 一些插件和网友的分享:http://www.jq-school.com/

钟爱技术 615

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

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34117211的博客 2421
上一篇: 爱的诠释,你懂的!我们都懂的!
下一篇: JAVA的MD5加密与解密
JavaAlpha
博客等级 码龄18年 910粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值