1. 主要思路 -- 使用request获取header中的user-agent串(UA)
a. 各种环境的user-agent串的比较
安卓(华为畅玩5x)
微信:Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; KIW-AL10 Build/HONORKIW-AL10) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025491 Mobile Safari/533.1 MicroMessenger/6.3.13.49_r4080b63.740 NetType/WIFI Language/zh_CN
支付宝:Mozilla/5.0 (Linux; U; Android 5.1.1; en-us; KIW-AL10 Build/HONORKIW-AL10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/1.0.0.100 U3/0.8.0 Mobile Safari/534.30 AlipayDefined(nt:WIFI,ws:360|592|3.0) AliApp(AP/9.5.3.030408) AlipayClient/9.5.3.030408 Language/zh-Hans
UC浏览器:Mozilla/5.0 (Linux; U; Android 5.1.1; zh-CN; KIW-AL10 Build/HONORKIW-AL10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.9.5.729 U3/0.8.0 Mobile Safari/534.30
安卓(酷派)
app: Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; Coolpad 5892 Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
苹果(5s)
微信:Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 MicroMessenger/6.3.6 NetType/WIFI Language/zh_CN
支付宝:Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 PSDType(1) AlipayDefined(nt:WIFI,ws:320|504|2.0) AliApp(AP/9.5.1.010816) AlipayClient/9.5.1.010816 Language/zh-Hans
app: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143
苹果(6)
QQ : Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 QQ/6.1.0.496 Pixel/750 NetType/WIFI Mem/127
safari: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1
Windows7(专业版64位)
chrome 48: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
firefox 44: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
ie 8: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Fedore
firefox: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0
通过对上面的UA信息做比较,发现支付宝和微信在自己的UA信息里面均带有自身的产品信息,我们的APP的UA信息里面未包含相关的产品信息,与app组沟通,得到相应会在下一个版本中加入相应的UA信息。这样就可以通过UA里面的产品信息进行判断请求来源。以上得出结论
微信的产品信息是:MecroMessager/版本号
支付宝的 产品信息是:AlipayClient/版本号
移动APP的产品信息:bindid/版本号
未发现产品信息的均被视为WEB端来源
b. 实现方式:
//在service中获取request对象
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
//通过 request 获取 UA 信息
String userAgent = request.getHeader("User-Agent");
//通过 UA 信息中的是否包含某类型的产品信息判断请求来源
if(userAgent.contains("MicroMessenger")){
channel = CHANNEL.WECHAT.getCode();
}else if(userAgent.contains("AlipayClient")){
channel = CHANNEL.ALIPAY.getCode();
}else if(userAgent.contains("")){ //此判断信息待定
channel = CHANNEL.APP.getCode();
}else{
channel = CHANNEL.WEB.getCode();
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于