Java后端获取接口访问端是PC还是手机

这篇具有很好参考价值的文章主要介绍了Java后端获取接口访问端是PC还是手机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 试试;

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • uniapp开发小程序-如何判断小程序是在手机端还是pc端打开

    官方说明 https://developers.weixin.qq.com/miniprogram/dev/devtools/pc-dev.html 小程序如何判断是 PC 平台? 通过 getSystemInfo 官方接口(platform 是 windows) 通过 UA(PC UA 包含 MiniProgramEnv/Windows) App.vue 判断是否是pc端的函数(如果宽度足够也视为pc端) 同时值得注意的是,微信开发者工具的

    2024年02月04日
    浏览(10)
  • 使用JS判断访问设备是电脑还是手机

    有时在编写前端页面视图时,需要根据用户不同的访问设备(手机或电脑)对页面设置不同显示样式或跳转到不同的页面。可以使用JS代码获取Navigator对象的userAgent属性,通过对该属性值的分析就可以知道当前访问的设备是电脑还是手机。 一些常用设备访问时返回的userAgent属

    2024年02月08日
    浏览(10)
  • IC设计的前端和后端是如何区分的?

    **1、IC前端:**根据芯片规格书完成SOC的设计和集成, 使用仿真验证工具完成SOC的设计验证。 **2、IC后端:**将前端设计产生的门级网表通过EDA设计工具进行布局布线和进行物理验证并最终产生供制造用的GDSII数据 **1、IC前端:**熟悉处理器/DMA/AXI/AHB总线。 **2、IC后端:**芯片物

    2024年01月24日
    浏览(14)
  • 让后端设置了Access-Control-Expose-Headers还是获取不到filename?

    让后端设置了Access-Control-Expose-Headers还是获取不到filename?

    问题:导出一个文件,从后端设置的content-disposition中获取对应的fileName,but,本地获取正常,但是部署线上就无法获取。 大过年的@让修改,你敢信? 前端获取  重要代码  let fileName=decodeURIComponent(res.headers[\\\'content-disposition\\\'].split(\\\'=\\\')[1]);  但是res.headers部署后获取不到content-dis

    2024年02月12日
    浏览(7)
  • Charles:移动端抓包 / windows客户端 / iOS手机 / HarmonyOS 4.0 / 手机访问PC本地项目做调试

    Charles:移动端抓包 / windows客户端 / iOS手机 / HarmonyOS 4.0 / 手机访问PC本地项目做调试

    一、背景描述 1.1、本文需求:移动端进行抓包调试 1.2、理解Charles可以做什么 Charles是一款跨平台的网络代理软件,可以用于捕获和分析网络流量,对HTTP、HTTPS、HTTP/2等协议进行调试和监控。使用Charles可以帮助开发人员进行Web开发、调试和测试,同时也可以用于网络安全和隐

    2024年02月08日
    浏览(10)
  • 微信小程序登录+获取手机号码(前端+后端)

    微信小程序登录+获取手机号码(前端+后端)

    上面这张是微信小程序官方原图,登录流程如上图所示,下面一步步进行以及说一下碰到的坑。 1.wx.login()获取code         调用微信小程序官方提供的方法获取code提供给后端用以换取session_key、openid。         注意:code只能使用一次就会失效,且有效期为5分钟 2.后端收到

    2024年02月12日
    浏览(42)
  • 毕业直接后端开发岗,选择C++还是java?

    毕业直接后端开发岗,选择C++还是java?

    我们来分析一下,2020 年 4 月,Java 仍然是 TIOBE 指数的第一名;但紧接着 5 月份,Java 就不得不将第一名让给了 C。后来在 2021 年,Python 也变得势不可挡,超越了 Java。现在看起来,C++ 则将是下一个超越 Java 的语言。具有高性能的高级编程是 C++ 表现出色的关键原因。C++ 语言每

    2024年02月04日
    浏览(10)
  • 使用vue+springboot+mybatis开发的信息管理系统,前端和后端是怎么进行交互的

    1. 前端向后端发送http请求。 2. 后端接收到请求后,通过mybatis从数据库中获取所需数据。 3. 后端将处理完的数据通过restful api返回给前端。 4. 前端根据后端返回的数据进行页面渲染。 具体来说,可以分为以下几个步骤: 前端使用vue.js作为基础框架,使用axios库向后端发送h

    2024年02月06日
    浏览(12)
  • 微信小程序获取用户手机号码教程(前端+后端)

    微信小程序获取用户手机号码教程(前端+后端)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在开发微信小程序时,获取用户手机号码是常见的需求之一。本教程将为你详细介绍如何在前端和后端实现获取用

    2024年02月08日
    浏览(19)
  • 微信小程序获取用户手机号码教程(前端+后端)

    微信小程序获取用户手机号码教程(前端+后端)

    在开发一款微信小程序时,需要用户进行微信登录,获取用户的手机号码来作为用户的唯一标识(userId),于是探索获取用户手机号码的方式; (当然,通过wx.login来获取code,进而换取用户的openid也是可以的) 目前版本的微信小程序获取用户手机号码的方式如下: 前端开发

    2024年02月12日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包