1测试用代码
项目中遇到的, 公司的开发不是前后端分离的模式, html页面是后端返回的, 所以页面需要根据客户端是PC还是手机调整布局;
试了一下在后端获取客户端类型, 方法是用请求报文里的 headers中的 user-agent 信息;
起初也不知道, 于是做了以下试验代码
@GetMapping(value = "/test")
public ModelAndView CheckLoginForModuleUse(HttpServletRequest req){
System.out.println("=======================访问端信息=======================");
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = headerNames.nextElement();
System.out.print(key);
System.out.print("=");
System.out.println(req.getHeader(key));
}
System.out.println("=======================END=======================");
}
2 收集到的日志
部署并尝试用多种客户端访问后, 有以下日志产生, 本次使用的客户端有:
1 谷歌浏览器 windows
2 Edge浏览器 windows
3 iPhone手机App, (App是客户的app, 在app内部访问接口)
4 Android手机App
5 PC端App
比较遗憾没有 macbook 试试;文章来源:https://www.toymoban.com/news/detail-510712.html
eg.1 明显这个客户端是 iphone14
=======================访问端信息=======================
host=abc.def.com.cn
accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
upgrade-insecure-requests=1
cookie=cookiesession1=678B28FB01234ABCDEFGHIJKLMNO798D
user-agent=Qing/0.9.91;iOS 15.5;Apple;iPhone14,4;deviceId:354a8216-d7b0-41f8-9c74-50ea4771c68e;deviceName:iPhone%20%284%29;clientId:38881;os:iOS 15.5;brand:Apple;model:iPhone14,4;oem:bgy;lang:zh-CN;fontNum:0;Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;redVer:1.0;V9BridgeProtocalNoDoubleSlash;ver:1.0.21;
accept-language=zh-CN
accept-encoding=gzip, deflate
connection=keep-alive
=======================END=======================
eg.2 iphone14
=======================访问端信息=======================
host=abc.def.com.cn
accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
upgrade-insecure-requests=1
cookie=JSESSIONID=2E49BEB3B58920C94C057B74F595FDF6; dluinfoforsec=8PdlRxrxgqzc8+CJUTqV4T69qFarxTwudltN6pNW6M8r7Y+HNzfi262B8JEkzGH0; cookiesession1=678B28FB01234ABCDEFGHIJKLMNO798D
user-agent=Qing/0.9.91;iOS 15.5;Apple;iPhone14,4;deviceId:354a8216-d7b0-41f8-9c74-50ea4771c68e;deviceName:iPhone%20%284%29;clientId:38881;os:iOS 15.5;brand:Apple;model:iPhone14,4;oem:bgy;lang:zh-CN;fontNum:0;Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;redVer:1.0;V9BridgeProtocalNoDoubleSlash;ver:1.0.21;
accept-language=zh-CN
accept-encoding=gzip, deflate
connection=keep-alive
=======================END=======================
eg.3 iphone10
=======================访问端信息=======================
host=abc.def.com.cn
accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
upgrade-insecure-requests=1
user-agent=Qing/0.9.91;iOS 13.6.1;Apple;iPhone10,1;deviceId:a84d5a21-b419-4e97-8fbf-7adedf439687;deviceName:The%20Mountain%20Echoes;clientId:38881;os:iOS 13.6.1;brand:Apple;model:iPhone10,1;oem:bgy;lang:zh-CN;fontNum:0;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;redVer:1.0;V9BridgeProtocalNoDoubleSlash;ver:1.0.21;
accept-language=zh-CN
accept-encoding=gzip, deflate
connection=keep-alive
x-forwarded-for=144.0.23.4
x-real-ip=144.0.23.4
x-forwarded-proto=http
=======================END=======================
eg.4 Android
=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Qing/0.9.86;Android 10.1.8;OPPO;PEDM00;deviceId:80fa56ba-540f-33a8-bdcc-adea579cbf8b;deviceName:OPPO PEDM00;clientId:10201;;os:Android 10.1.8;brand:OPPO;model:PEDM00;lang:zh-CN;ver:1.0.11;redVer:1.0;Mozilla/5.0 (Linux; Android 12; PEDM00 Build/RKQ1.211103.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4692.98 Mobile Safari/537.36
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
x-requested-with=cn.com.happypace.dom1
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
cookie=JSESSIONID=A8C16AA7DD65694338DF1D7E84530A51; ASP.NET_SessionId=k3wpql1rj4ifx4nrabo4bgux; dluinfoforsec=8PdlRxrxgqzc8+CJUTqV4T69qFarxTwudltN6pNW6M8r7Y+HNzfi262B8JEkzGH0
x-forwarded-for=223.104.69.30
x-real-ip=223.104.69.30
x-forwarded-proto=http
=======================END=======================
eg.5 有Chrome字样, 分不清是 chrome 还是 edge
=======================访问端信息=======================
host=10.10.166.37
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9
cookie=userInfo=YWRtaW58YWQxYTE5OTEtMzY4Mi00MDUzLWJiNDYtYTg5MGM1Mjk4NmZlfHRydWU=; JSESSIONID=D3093E40172B09AF138EE6A729EE653C; dlcurbigdeptid=dlwwr; dluinfoforchangeuser=48vmoGkU7M78j2IOOsDD1A==; dluinfoforsec=hCdwq8mRUhOZMaTsxXxB/RZCsLjdOYUudTueNHq3/AwdBdHDeq7+gtiuzXEUVjZj
=======================END=======================
eg.6 有Chrome字样, 分不清是 chrome 还是 edge
=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9
cookie=userInfo=YWRtaW58YWQxYTE5OTEtMzY4Mi00MDUzLWJiNDYtYTg5MGM1Mjk4NmZlfHRydWU=; JSESSIONID=A596B4209B9DFCD1726C1224ED8F6FC1; Hm_lvt_5c138214afe064d1f739fb9535e08b20=1646808109; dlcurbigdeptid=dlwwr; dluinfoforchangeuser=48vmoGkU7M78j2IOOsDD1A==; dluinfoforsec=hCdwq8mRUhOZMaTsxXxB/RZCsLjdOYUudTueNHq3/AwdBdHDeq7+gtiuzXEUVjZj
x-forwarded-for=144.0.23.4
x-real-ip=144.0.23.4
x-forwarded-proto=http
=======================END=======================
eg.7 有Chrome字样, 分不清是 chrome 还是 edge
=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.26
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
x-forwarded-for=144.0.23.4
x-real-ip=144.0.23.4
x-forwarded-proto=http
=======================END=======================
eg.8 有Chrome字样, 分不清是 chrome 还是 edge
=======================访问端信息=======================
host=abc.def.com.cn
connection=keep-alive
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate
accept-language=zh-CN,zh;q=0.9
cookie=JSESSIONID=C2546DAF8A563BB96F49BF8F787EB904; dlcurbigdeptid=dlwwr; dluinfoforchangeuser=48vmoGkU7M78j2IOOsDD1A==; dluinfoforsec=8PdlRxrxgqzc8+CJUTqV4T69qFarxTwudltN6pNW6M8r7Y+HNzfi262B8JEkzGH0
=======================END=======================
3 结论
经分析, 移动端的 user-agent 信息中都含有 Mobile 字样, 其中安卓机还带有 Android 字样, 苹果机带有 iPhone 字样;
最初分析的时候并没有注意到这个独有的 Mobile 字样, 所以我的代码是这样实现的文章来源地址https://www.toymoban.com/news/detail-510712.html
@GetMapping(value = "/test")
public ModelAndView CheckLoginForModuleUse(HttpServletRequest req){
String url = "xxxx";
String userAgent = req.getHeader("user-agent");
if (userAgent != null) {
userAgent = userAgent.toLowerCase();
if (userAgent.contains("android") || userAgent.contains("iphone")) {
// url中带上参数cusotmer=2标识类型, 页面html中已经做了处理, 自动根据customer的值调整布局
url += "&cusotmer=2";
}
}
}
到了这里,关于Java后端获取接口访问端是PC还是手机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!