背景
服务运行在内网,与本服务交互的家伙,依靠特定的Cookie来决定某个状态。
问题就来了,Cookie的域要么基于IP要么基于域名,考虑到跨越:
- 如果基于IP,两个服务必须运行在同一服务器上
- 如果基于域名,内网需部署DNS服务器或者自己手动改hosts文件
反正两者都有些崩溃,决定两个都支持,酌情处理。
需求
- 当用户通过IP访问时,Cookie的Domain为IP地址
- 当用户通过域名访问时,Cookie的Domain为二级域名
Eg: 访问(test1.test2.company.com时,Domain为company.com
解决方案
依据正则表达式写了段代码
/* 正则,粗略的匹配下IP还是域名,代码能跑这的,格式什么的都合法 */
public static String PATTERN_L2DOMAIN = "\\w*\\.\\w*:";
public static String PATTERN_IP = "(\\d*\\.){3}\\d*";
public static String getCookieDomain(String url) {
/* 以IP形式访问时,返回IP */
Pattern ipPattern = Pattern.compile(PATTERN_IP);
Matcher matcher = ipPattern.matcher(url);
if (matcher.find()) {
System.out.println("[HttpUtil][getCookieDomain] match ip.");
return matcher.group();
}
/* 以域名访问时,返回二级域名 */
Pattern pattern = Pattern.compile(PATTERN_L2DOMAIN);
matcher = pattern.matcher(url);
if (matcher.find()) {
System.out.println("[HttpUtil][getCookieDomain] match domain.");
String domain = matcher.group();
/* 裁剪一下是因为连着冒号也匹配进去了,唉~ */
return domain.substring(0, domain.length() - 1);
}
return null;
}