User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。UA也成为了,我们服务器判断请求是PC浏览器,还是移动端浏览器的主要依据了。虽然我是一个JavaEE工程师,但在实际中经常要开发一些微信商城或APP应用,所以判断请求来自哪里,就显得尤为重要了。
1 import javax.servlet.http.HttpServletRequest;
2
3 import eu.bitwalker.useragentutils.Browser;
4 import eu.bitwalker.useragentutils.DeviceType;
5 import eu.bitwalker.useragentutils.UserAgent;
6
7 /**
8 * 用户代理字符串识别工具
9 */
10 public class UserAgentUtils {
11
12 /**
13 * 获取用户代理对象
14 * @param request
15 * @return
16 */
17 public static UserAgent getUserAgent(HttpServletRequest request){
18 return UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
19 }
20
21 /**
22 * 获取设备类型
23 * @param request
24 * @return
25 */
26 public static DeviceType getDeviceType(HttpServletRequest request){
27 return getUserAgent(request).getOperatingSystem().getDeviceType();
28 }
29
30 /**
31 * 是否是PC
32 * @param request
33 * @return
34 */
35 public static boolean isComputer(HttpServletRequest request){
36 return DeviceType.COMPUTER.equals(getDeviceType(request));
37 }
38
39 /**
40 * 是否是手机
41 * @param request
42 * @return
43 */
44 public static boolean isMobile(HttpServletRequest request){
45 return DeviceType.MOBILE.equals(getDeviceType(request));
46 }
47
48 /**
49 * 是否是平板
50 * @param request
51 * @return
52 */
53 public static boolean isTablet(HttpServletRequest request){
54 return DeviceType.TABLET.equals(getDeviceType(request));
55 }
56
57 /**
58 * 是否是手机和平板
59 * @param request
60 * @return
61 */
62 public static boolean isMobileOrTablet(HttpServletRequest request){
63 DeviceType deviceType = getDeviceType(request);
64 return DeviceType.MOBILE.equals(deviceType) || DeviceType.TABLET.equals(deviceType);
65 }
66
67 /**
68 * 获取浏览类型
69 * @param request
70 * @return
71 */
72 public static Browser getBrowser(HttpServletRequest request){
73 return getUserAgent(request).getBrowser();
74 }
75
76 /**
77 * 是否IE版本是否小于等于IE8
78 * @param request
79 * @return
80 */
81 public static boolean isLteIE8(HttpServletRequest request){
82 Browser browser = getBrowser(request);
83 return Browser.IE5.equals(browser) || Browser.IE6.equals(browser)
84 || Browser.IE7.equals(browser) || Browser.IE8.equals(browser);
85 }
86
87 }
1 import java.io.BufferedReader;
2 import java.io.IOException;
3 import java.io.InputStreamReader;
4
5 /**
6 * MAC地址工具
7 */
8 public class MacUtils {
9
10 /**
11 * 获取当前操作系统名称. return 操作系统名称 例如:windows,Linux,Unix等.
12 */
13 public static String getOSName() {
14 return System.getProperty("os.name").toLowerCase();
15 }
16
17 /**
18 * 获取Unix网卡的mac地址.
19 *
20 * @return mac地址
21 */
22 public static String getUnixMACAddress() {
23 String mac = null;
24 BufferedReader bufferedReader = null;
25 Process process = null;
26 try {
27 /**
28 * Unix下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
29 */
30 process = Runtime.getRuntime().exec("ifconfig eth0");
31 bufferedReader = new BufferedReader(new InputStreamReader(
32 process.getInputStream()));
33 String line = null;
34 int index = -1;
35 while ((line = bufferedReader.readLine()) != null) {
36 /**
37 * 寻找标示字符串[hwaddr]
38 */
39 index = line.toLowerCase().indexOf("hwaddr");
40 /**
41 * 找到了
42 */
43 if (index != -1) {
44 /**
45 * 取出mac地址并去除2边空格
46 */
47 mac = line.substring(index + "hwaddr".length() + 1).trim();
48 break;
49 }
50 }
51 } catch (IOException e) {
52 e.printStackTrace();
53 } finally {
54 try {
55 if (bufferedReader != null) {
56 bufferedReader.close();
57 }
58 } catch (IOException e1) {
59 e1.printStackTrace();
60 }
61 bufferedReader = null;
62 process = null;
63 }
64
65 return mac;
66 }
67
68 /**
69 * 获取Linux网卡的mac地址.
70 *
71 * @return mac地址
72 */
73 public static String getLinuxMACAddress() {
74 String mac = null;
75 BufferedReader bufferedReader = null;
76 Process process = null;
77 try {
78 /**
79 * linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
80 */
81 process = Runtime.getRuntime().exec("ifconfig eth0");
82 bufferedReader = new BufferedReader(new InputStreamReader(
83 process.getInputStream()));
84 String line = null;
85 int index = -1;
86 while ((line = bufferedReader.readLine()) != null) {
87 index = line.toLowerCase().indexOf("硬件地址");
88 /**
89 * 找到了
90 */
91 if (index != -1) {
92 /**
93 * 取出mac地址并去除2边空格
94 */
95 mac = line.substring(index + 4).trim();
96 break;
97 }
98 }
99 } catch (IOException e) {
100 e.printStackTrace();
101 } finally {
102 try {
103 if (bufferedReader != null) {
104 bufferedReader.close();
105 }
106 } catch (IOException e1) {
107 e1.printStackTrace();
108 }
109 bufferedReader = null;
110 process = null;
111 }
112
113 // 取不到,试下Unix取发
114 if (mac == null){
115 return getUnixMACAddress();
116 }
117
118 return mac;
119 }
120
121 /**
122 * 获取widnows网卡的mac地址.
123 *
124 * @return mac地址
125 */
126 public static String getWindowsMACAddress() {
127 String mac = null;
128 BufferedReader bufferedReader = null;
129 Process process = null;
130 try {
131 /**
132 * windows下的命令,显示信息中包含有mac地址信息
133 */
134 process = Runtime.getRuntime().exec("ipconfig /all");
135 bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
136 String line = null;
137 int index = -1;
138 while ((line = bufferedReader.readLine()) != null) {
139 /**
140 * 寻找标示字符串[physical address]
141 */
142 // index = line.toLowerCase().indexOf("physical address");
143 // if (index != -1) {
144 if (line.split("-").length == 6){
145 index = line.indexOf(":");
146 if (index != -1) {
147 /**
148 * 取出mac地址并去除2边空格
149 */
150 mac = line.substring(index + 1).trim();
151 }
152 break;
153 }
154 index = line.toLowerCase().indexOf("物理地址");
155 if (index != -1) {
156 index = line.indexOf(":");
157 if (index != -1) {
158 /**
159 * 取出mac地址并去除2边空格
160 */
161 mac = line.substring(index + 1).trim();
162 }
163 break;
164 }
165 }
166 } catch (IOException e) {
167 e.printStackTrace();
168 } finally {
169 try {
170 if (bufferedReader != null) {
171 bufferedReader.close();
172 }
173 } catch (IOException e1) {
174 e1.printStackTrace();
175 }
176 bufferedReader = null;
177 process = null;
178 }
179
180 return mac;
181 }
182
183 public static String getMac(){
184 String os = getOSName();
185 String mac;
186 if (os.startsWith("windows")) {
187 mac = getWindowsMACAddress();
188 } else if (os.startsWith("linux")) {
189 mac = getLinuxMACAddress();
190 } else {
191 mac = getUnixMACAddress();
192 }
193 return mac == null ? "" : mac;
194 }
195
196 /**
197 * 测试用的main方法.
198 *
199 * @param argc 运行参数.
200 */
201 public static void main(String[] argc) {
202 String os = getOSName();
203 System.out.println("os: " + os);
204 if (os.startsWith("windows")) {
205 String mac = getWindowsMACAddress();
206 System.out.println("mac: " + mac);
207 } else if (os.startsWith("linux")) {
208 String mac = getLinuxMACAddress();
209 System.out.println("mac: " + mac);
210 } else {
211 String mac = getUnixMACAddress();
212 System.out.println("mac: " + mac);
213 }
214 }
215
216 }
1 /**
2 * 我们需要判断Http请求是来自手机端还是电脑端,关键是取得User-Agent的信息,进行筛选判断即可
3 * @param requestHeader
4 * @return
5 */
6 public static boolean isMobileDevice(String requestHeader){
7 /**
8 * android : 所有android设备
9 * mac os : iphone ipad
10 * windows phone:Nokia等windows系统的手机
11 */
12 String[] deviceArray = new String[]{"Android","android","mac os","windows phone"};
13 if(requestHeader == null)
14 return false;
15 requestHeader = requestHeader.toLowerCase();
16 for(int i=0;i<deviceArray.length;i++){
17 if(requestHeader.indexOf(deviceArray[i])>0){
18 return true;
19 }
20 }
21 return false;
22 }
1 //导入slf4j的包
2 import org.slf4j.Logger;
3 import org.slf4j.LoggerFactory;
4
5
6 //使用
7 private static Logger logger = LoggerFactory.getLogger(***.class);
1 //自动注入
2 @Autowired
3 protected HttpServletRequest request;
4
5
6
7 //在方法中调用isMobileDevice(String requestHeader)判断
8 if(isMobileDevice(requestHeader)){
9 logger.debug("使用手机浏览器");
10 return "/***/***";
11 }else{
12 logger.debug("使用web浏览器");
13 return "/***/***";
14 }
转载请注明出处!
http://www.cnblogs.com/libingbin/
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。