zoukankan      html  css  js  c++  java
  • 用户代理字符串识别工具源码与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/

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

  • 相关阅读:
    metasploit 常用命令汇总
    MSF命令 收集
    【转载】虫师『性能测试』文章大汇总
    渗透测试、取证、安全和黑客的热门链接
    Hackers top in China
    国外整理的一套在线渗透测试资源合集[转载]
    Filezilla中文字符文件看不到或显示乱码的解决办法
    Filezilla 多目录的访问设置
    ISAPI在IIS7上的配置
    数据库主体在该数据库中拥有 架构,无法删除解决方法(转)
  • 原文地址:https://www.cnblogs.com/libingbin/p/6033485.html
Copyright © 2011-2022 走看看