博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用户代理字符串识别工具源码与slf4j日志使用
阅读量:4677 次
发布时间:2019-06-09

本文共 10695 字,大约阅读时间需要 35 分钟。

  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 request15      * @return16      */17     public static UserAgent getUserAgent(HttpServletRequest request){18         return UserAgent.parseUserAgentString(request.getHeader("User-Agent"));19     }20     21     /**22      * 获取设备类型23      * @param request24      * @return25      */26     public static DeviceType getDeviceType(HttpServletRequest request){27         return getUserAgent(request).getOperatingSystem().getDeviceType();28     }29     30     /**31      * 是否是PC32      * @param request33      * @return34      */35     public static boolean isComputer(HttpServletRequest request){36         return DeviceType.COMPUTER.equals(getDeviceType(request));37     }38 39     /**40      * 是否是手机41      * @param request42      * @return43      */44     public static boolean isMobile(HttpServletRequest request){45         return DeviceType.MOBILE.equals(getDeviceType(request));46     }47     48     /**49      * 是否是平板50      * @param request51      * @return52      */53     public static boolean isTablet(HttpServletRequest request){54         return DeviceType.TABLET.equals(getDeviceType(request));55     }56 57     /**58      * 是否是手机和平板59      * @param request60      * @return61      */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 request70      * @return71      */72     public static Browser getBrowser(HttpServletRequest request){73         return getUserAgent(request).getBrowser();74     }75     76     /**77      * 是否IE版本是否小于等于IE878      * @param request79      * @return80      */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 ipad10          * 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
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/

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

转载于:https://www.cnblogs.com/libingbin/p/6033485.html

你可能感兴趣的文章
Ubuntu: How to Change the Computer Name
查看>>
java接口成员变量和方法默认修饰符
查看>>
mysql 导出数据字典
查看>>
原生js解决简单轮播图的切换
查看>>
PHP之十六个魔术方法详细介绍
查看>>
tp5.0中及其常用方法的一些函数方法(自己看)和技巧(不断添加中)
查看>>
什么是 PWA
查看>>
Single Number II
查看>>
hostapd源代码分析(三):管理帧的收发和处理
查看>>
java---Unicode-字符转换器
查看>>
客户端的测试
查看>>
Server Tomcat v7.0 Server at localhost failed to start.
查看>>
js数据结构之列表的详细实现方法
查看>>
【转】eclipse 安装插件
查看>>
js基础学习之-js全局对象
查看>>
解决【win10管理员已阻止程序运行】问题时有感
查看>>
NumPy切片和索引
查看>>
Linux CentOS7 VMware 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr...
查看>>
易语言拖拽文件命令,拖放对象组件应用
查看>>
MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法 (转载)
查看>>