Spring 6中如何检测REST API请求来自移动端还是PC端
Spring 6 检测移动端/PC端请求的替代方案
由于Spring 6移除了org.springframework.mobile包,你可以通过以下两种常用方式实现设备类型检测:
1. 手动解析User-Agent请求头
HTTP请求的User-Agent头包含客户端设备的标识信息,你可以通过检查其中的关键词来判断设备类型:
import jakarta.servlet.http.HttpServletRequest; public class DeviceDetectionUtil { public static boolean isMobileOrTablet(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); if (userAgent == null) { return false; } // 统一转为小写避免大小写匹配问题 userAgent = userAgent.toLowerCase(); // 匹配常见移动端、平板设备的关键词 String[] mobileKeywords = {"android", "iphone", "ipad", "windows phone", "mobile", "tablet", "touch"}; for (String keyword : mobileKeywords) { if (userAgent.contains(keyword)) { return true; } } return false; } }
使用时直接调用工具类方法,和你原有的逻辑保持一致:
if (DeviceDetectionUtil.isMobileOrTablet(request)) { return true; }
2. 使用第三方User-Agent解析库
如果需要更精准的设备分类(比如区分平板和手机、识别具体设备品牌),可以用成熟的第三方库user-agent-utils:
添加Maven依赖
<dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> <version>1.21</version> </dependency>
代码示例
import eu.bitwalker.useragentutils.DeviceType; import eu.bitwalker.useragentutils.UserAgent; import jakarta.servlet.http.HttpServletRequest; public class DeviceDetectionUtil { public static boolean isMobileOrTablet(HttpServletRequest request) { String userAgentStr = request.getHeader("User-Agent"); UserAgent userAgent = UserAgent.parseUserAgentString(userAgentStr); DeviceType deviceType = userAgent.getOperatingSystem().getDeviceType(); return deviceType == DeviceType.MOBILE || deviceType == DeviceType.TABLET; } }
这个库会自动处理各种复杂的User-Agent格式,检测结果的准确性更高。
内容的提问来源于stack exchange,提问作者Nidhi257
相关产品推荐
相关产品推荐

