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

it2022-05-13  56

  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/

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

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

相关资源:JAVA上百实例源码以及开源项目源代码

最新回复(0)