HttpRequestDeviceUtils.java
7.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/**
* Copyright 2015-2025 FLY的狐狸(email:jflyfox@sina.com qq:369191470).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.jflyfox.jfinal.component.interceptor;
import javax.servlet.http.HttpServletRequest;
public class HttpRequestDeviceUtils {
/** Wap网关Via头信息中特有的描述信息 */
private static String mobileGateWayHeaders[] = new String[] { //
"ZXWAP",// 中兴提供的wap网关的via信息,例如:Via=ZXWAP GateWayZTE Technologies,
"chinamobile.com",// 中国移动的诺基亚wap网关,例如:Via=WTP/1.1
// GDSZ-PB-GW003-WAP07.gd.chinamobile.com (Nokia
// WAP Gateway 4.1 CD1/ECD13_D/4.1.04)
"monternet.com",// 移动梦网的网关,例如:Via=WTP/1.1
// BJBJ-PS-WAP1-GW08.bj1.monternet.com. (Nokia WAP
// Gateway 4.1 CD1/ECD13_E/4.1.05)
"infoX",// 华为提供的wap网关,例如:Via=HTTP/1.1 GDGZ-PS-GW011-WAP2 (infoX-WISG
// Huawei Technologies),或Via=infoX WAP Gateway V300R001
// Huawei Technologies
"XMS 724Solutions HTG",// 国外电信运营商的wap网关,不知道是哪一家
"wap.lizongbo.com",// 自己测试时模拟的头信息
"Bytemobile",// 貌似是一个给移动互联网提供解决方案提高网络运行效率的,例如:Via=1.1 Bytemobile OSN
// WebProxy/5.1
};
/** 电脑上的IE或Firefox浏览器等的User-Agent关键词 */
private static String[] pcHeaders = new String[] { "Windows 98", "Windows ME", "Windows 2000", "Windows XP",
"Windows NT", "Ubuntu" };
/** 手机浏览器的User-Agent里的关键词 */
private static String[] mobileUserAgents = new String[] { "Nokia",// 诺基亚,有山寨机也写这个的,总还算是手机,Mozilla/5.0
// (Nokia5800
// XpressMusic)UC
// AppleWebkit(like
// Gecko)
// Safari/530
"SAMSUNG",// 三星手机
// SAMSUNG-GT-B7722/1.0+SHP/VPP/R5+Dolfin/1.5+Nextreaming+SMM-MMS/1.2.0+profile/MIDP-2.1+configuration/CLDC-1.1
"MIDP-2",// j2me2.0,Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2
// NokiaE75-1 /110.48.125 Profile/MIDP-2.1
// Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML like
// Gecko) Safari/413
"CLDC1.1",// M600/MIDP2.0/CLDC1.1/Screen-240X320
"SymbianOS",// 塞班系统的,
"MAUI",// MTK山寨机默认ua
"UNTRUSTED/1.0",// 疑似山寨机的ua,基本可以确定还是手机
"Windows CE",// Windows CE,Mozilla/4.0 (compatible; MSIE 6.0;
// Windows CE; IEMobile 7.11)
"iPhone",// iPhone是否也转wap?不管它,先区分出来再说。Mozilla/5.0 (iPhone; U; CPU
// iPhone OS 4_1 like Mac OS X; zh-cn) AppleWebKit/532.9
// (KHTML like Gecko) Mobile/8B117
"iPad",// iPad的ua,Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X;
// zh-cn) AppleWebKit/531.21.10 (KHTML like Gecko)
// Version/4.0.4 Mobile/7B367 Safari/531.21.10
"Android",// Android是否也转wap?Mozilla/5.0 (Linux; U; Android
// 2.1-update1; zh-cn; XT800 Build/TITA_M2_16.22.7)
// AppleWebKit/530.17 (KHTML like Gecko) Version/4.0
// Mobile Safari/530.17
"BlackBerry",// BlackBerry8310/2.7.0.106-4.5.0.182
"UCWEB",// ucweb是否只给wap页面? Nokia5800
// XpressMusic/UCWEB7.5.0.66/50/999
"ucweb",// 小写的ucweb貌似是uc的代理服务器Mozilla/6.0 (compatible; MSIE 6.0;)
// Opera ucweb-squid
"BREW",// 很奇怪的ua,例如:REW-Applet/0x20068888 (BREW/3.1.5.20; DeviceId:
// 40105; Lang: zhcn) ucweb-squid
"J2ME",// 很奇怪的ua,只有J2ME四个字母
"YULONG",// 宇龙手机,YULONG-CoolpadN68/10.14 IPANEL/2.0 CTC/1.0
"YuLong",// 还是宇龙
"COOLPAD",// 宇龙酷派YL-COOLPADS100/08.10.S100 POLARIS/2.9 CTC/1.0
"TIANYU",// 天语手机TIANYU-KTOUCH/V209/MIDP2.0/CLDC1.1/Screen-240X320
"TY-",// 天语,TY-F6229/701116_6215_V0230 JUPITOR/2.2 CTC/1.0
"K-Touch",// 还是天语K-Touch_N2200_CMCC/TBG110022_1223_V0801 MTK/6223
// Release/30.07.2008 Browser/WAP2.0
"Haier",// 海尔手机,Haier-HG-M217_CMCC/3.0 Release/12.1.2007
// Browser/WAP2.0
"DOPOD",// 多普达手机
"Lenovo",// 联想手机,Lenovo-P650WG/S100 LMP/LML Release/2010.02.22
// Profile/MIDP2.0 Configuration/CLDC1.1
"LENOVO",// 联想手机,比如:LENOVO-P780/176A
"HUAQIN",// 华勤手机
"AIGO-",// 爱国者居然也出过手机,AIGO-800C/2.04 TMSS-BROWSER/1.0.0 CTC/1.0
"CTC/1.0",// 含义不明
"CTC/2.0",// 含义不明
"CMCC",// 移动定制手机,K-Touch_N2200_CMCC/TBG110022_1223_V0801 MTK/6223
// Release/30.07.2008 Browser/WAP2.0
"DAXIAN",// 大显手机DAXIAN X180 UP.Browser/6.2.3.2(GUI) MMP/2.0
"MOT-",// 摩托罗拉,MOT-MOTOROKRE6/1.0 LinuxOS/2.4.20 Release/8.4.2006
// Browser/Opera8.00 Profile/MIDP2.0 Configuration/CLDC1.1
// Software/R533_G_11.10.54R
"SonyEricsson",// 索爱手机,SonyEricssonP990i/R100 Mozilla/4.0
// (compatible; MSIE 6.0; Symbian OS; 405) Opera
// 8.65 [zh-CN]
"GIONEE",// 金立手机
"HTC",// HTC手机
"ZTE",// 中兴手机,ZTE-A211/P109A2V1.0.0/WAP2.0 Profile
"HUAWEI",// 华为手机,
"webOS",// palm手机,Mozilla/5.0 (webOS/1.4.5; U; zh-CN)
// AppleWebKit/532.2 (KHTML like Gecko) Version/1.0
// Safari/532.2 Pre/1.0
"GoBrowser",// 3g GoBrowser.User-Agent=Nokia5230/GoBrowser/2.0.290
// Safari
"IEMobile",// Windows CE手机自带浏览器,
"WAP2.0"// 支持wap 2.0的
};
/**
* 根据当前请求的特征,判断该请求是否来自手机终端,主要检测特殊的头信息,以及user-Agent这个header
*
* @param request
* http请求
* @return 如果命中手机特征规则,则返回对应的特征字符串
*/
public static boolean isMobileDevice(HttpServletRequest request) {
boolean b = false;
boolean pcFlag = false;
boolean mobileFlag = false;
String via = request.getHeader("Via");
String userAgent = request.getHeader("user-agent");
for (int i = 0; via != null && !via.trim().equals("") && i < mobileGateWayHeaders.length; i++) {
if (via.contains(mobileGateWayHeaders[i])) {
mobileFlag = true;
break;
}
}
for (int i = 0; !mobileFlag && userAgent != null && !userAgent.trim().equals("") && i < mobileUserAgents.length; i++) {
if (userAgent.contains(mobileUserAgents[i])) {
mobileFlag = true;
break;
}
}
for (int i = 0; userAgent != null && !userAgent.trim().equals("") && i < pcHeaders.length; i++) {
if (userAgent.contains(pcHeaders[i])) {
pcFlag = true;
break;
}
}
if (mobileFlag == true && pcFlag == false) {
b = true;
}
return b;// false pc true shouji
}
}