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;i0){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/
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。