You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay7.0/7.4中Freemarker模板${device}无法返回设备数据求助

Freemarker ${device} 变量返回全unknown的解决办法

问题还原

模板中${device}返回的设备数据全部为unknown(仅qwertyKeyboard和tablet有值),输出内容如下:

{brand=unknown, browser=unknown, browserVersion=unknown, model=unknown, os=unknown, osVersion=unknown, pointingMethod=unknown, qwertyKeyboard=true, screenPhysicalSize={height=-1.0, width=-1.0}, screenResolution={height=-1.0, width=-1.0}, tablet=false}

解决步骤

  • 检查请求头传递
    Freemarker本身不具备设备检测能力,device变量依赖后端通过User-Agent请求头解析设备信息。需确认:

    • 后端能正常获取到浏览器发送的User-Agent头,反向代理(如Nginx)需配置保留该请求头,避免被过滤或篡改。
    • 在后端打印请求头日志,验证User-Agent是否存在且格式正常。
  • 排查设备检测依赖库
    如果使用了第三方设备检测库(如DeviceDetector、UserAgentUtils):

    • 确认库版本是否为最新,旧版本数据库无法识别新设备/浏览器。
    • 检查库的配置文件(如DeviceDetector的设备识别yaml库)是否正确加载,是否需要定期更新设备数据。
  • 验证变量注入逻辑
    检查后端代码中device对象的注入流程:

    • 确认设备检测结果已正确封装为device对象,并放入Freemarker的模板上下文(如ModelAndView、Configuration变量配置)。
    • 排查是否存在逻辑错误(如空指针、默认值覆盖)导致所有设备字段被设为unknown。
  • 手动测试检测逻辑
    拿真实的User-Agent字符串(例如Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1)直接传入后端检测方法:

    • 若解析失败,说明是检测库本身的问题;若解析正常,说明是模板上下文注入环节出错。
  • 排查特殊环境干扰

    • 本地测试时,检查是否有浏览器插件、代理工具修改了User-Agent,导致检测失效。
    • 确认防火墙、安全软件未拦截请求头的正常传递。

内容的提问来源于stack exchange,提问作者Hani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:40:23