用户代理字符串识别工具源码与slf4j日志使用

  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/

感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

posted on 2016-11-01 23:59  bingbinlee  阅读(590)  评论(0编辑  收藏  举报