| 庫 | Maven 坐標 | 特點 |
| YAUAA (Yet Another User Agent Analyzer) | nl.basjes.parse.useragent:yauaa | 極快、準確、支援設備/OS/瀏覽器/版本多維度、可擴展規則 |
| User-Agent-Utils | eu.bitwalker:UserAgentUtils | 簡單易用、輕量、開箱即用 |
| UAParser (uap-java) | com.github.ua-parser:uap-java | 基於 regexes.yaml 規則庫、跨語言一致 |
YAUAA 使用範例
UserAgentAnalyzer analyzer = UserAgentAnalyzer.newBuilder().build();
UserAgent ua = analyzer.parse(request.getHeader("User-Agent"));
String browser = ua.getValue(UserAgent.BROWSER_NAME); // "Chrome"
String browserVer = ua.getValue(UserAgent.BROWSER_VERSION); // "120.0.0.0"
String os = ua.getValue(UserAgent.OPERATING_SYSTEM_NAME); // "Windows 10"
String device = ua.getValue(UserAgent.DEVICE_CLASS); // "Desktop"
boolean isBot = ua.getValue(UserAgent.AGENT_CLASS).equals("Robot");
常用 Request 物件 API 速查表
| 方法 | 用途 | 範例回傳 |
getHeader(String name) | 取得 HTTP Header | User-Agent, Referer, Accept-Language |
getMethod() | HTTP 方法 | GET, POST, PUT |
getRequestURI() | 請求 URI (含 context path) | /myapp/article/123 |
getServletPath() | 匹配的 Servlet 路徑 | /article/detail |
getServerName() | 伺服器主機名 | localhost, www.example.com |
getServerPort() | 伺服器端口 | 8080, 443 |
getRemoteAddr() | 客戶端 IP (可能為代理 IP) | 192.168.1.100 |
getRemoteHost() | 客戶端主機名 (DNS 反解,慢) | client-host.example.com |
getProtocol() | 協議版本 | HTTP/1.1 |
getHeaderNames() | 所有 Header 名稱枚舉 | Iterator |
getHeaders(String name) | 多值 Header (如多個 Cookie) | Enumeration |
伺服器端系統資訊 (非客戶端)
System.getProperty("os.name"); // "Windows 10", "Linux"
System.getProperty("os.version"); // "10.0", "5.15.0"
System.getProperty("os.arch"); // "amd64", "aarch64"
System.getProperty("java.version"); // "21.0.1"
System.getProperty("java.vendor"); // "Eclipse Adoptium"
最佳實踐建議
- 不要信任 UA 做關鍵業務邏輯:可偽造、代理修改、爬蟲伪裝。僅用於統計分析、相容性降級、日誌記錄。
- 響應式設計替代 UA 判斷:CSS Media Queries、JS
window.matchMedia 處理不同螢幕/裝置。
- 真實客戶端 IP 獲取:反向代理 (Nginx) 設置
X-Forwarded-For,Java 端讀取 request.getHeader("X-Forwarded-For") 取第一個非代理 IP。
- 隱私合規:GDPR/個資法要求 UA/IP 屬個人資料,收集需告知、最小化、加密儲存、定期清理。
- 上一篇文章: Eclipse + Lomboz 開發 JSP 環境配置實戰 (歷史版本參考)
- 下一篇文章: Eclipse 插件開發實戰:基於 WTP 打造自定義 JSP 編輯器(一)— 整體架構與核心概念
Copyright ©
程式碼之家 All Rights Reserved