最近公司系统中加入了移动端业务线,拦截器中需要对终端进行判断
首先百度了下,大部分代码类似于此
/**
* 判断请求是否手机端
* @param req
* @return
*/
public static boolean isMobile(HttpServletRequest req) {
UserAgent ua = UserAgent.parseUserAgentString(req.getHeader("User-Agent"));
OperatingSystem os = ua.getOperatingSystem();
if(DeviceType.MOBILE.equals(os.getDeviceType())) {
return true;
}
return false;
}
但是实践后发现UserAgent并没有parseUserAgentString方法。这里就有两个问题了,UserAgent并不是常用的java包,所以UserAgent是引用的哪个包,以及对应哪个包版本。
我项目中java提供的工具包只有hutool(如下图),所以百度上的代码大概率也是hutool包,只不过版本不同,如下图
image.png
然后找到了近版本hutool工具类文档,既然方法能用那就用它了
/**
* 判断是否是手机端请求
* @param req
* @return
*/
public static boolean isMobile(HttpServletRequest req) {
String uaStr = req.getHeader("User-Agent");
printUserAgentInfo(uaStr);
UserAgent ua = UserAgentUtil.parse(uaStr);
return ua.isMobile();
}
/**
* 打印终端信息
*
* @param uaStr
*/
public static void printUserAgentInfo(String uaStr) {
UserAgent ua = UserAgentUtil.parse(uaStr);
System.out.println("User-Agent: " + uaStr);
System.out.println("ua.getBrowser().toString(): " + ua.getBrowser().toString());
System.out.println("ua.getVersion(): " + ua.getVersion());
System.out.println("ua.getEngine().toString(): " + ua.getEngine().toString());
System.out.println("ua.getEngineVersion(): " + ua.getEngineVersion());
System.out.println("ua.getOs().toString(): " + ua.getOs().toString());
System.out.println("ua.getPlatform().toString(): " + ua.getPlatform().toString());
}
其他终端可以通过platform和os进行精确判断。
当然也可以通过头信息中的User-Agent直接判断,就是少了点优雅