首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

HttpServletRequest 核心 API 實戰手冊:防盜鏈、亂碼、轉發與編碼全攻略

     編輯:Java 程式設計入門

Referer 防盜鏈實戰

public void referer(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String referer = request.getHeader("referer");
    // 校驗來源:非本站或為空則重定向
    if (referer == null || !referer.startsWith("https://localhost")) {
        response.sendRedirect("/webTwo/index.jsp");
        return;
    }
    response.getOutputStream().write("welcome".getBytes());
}

原理:Referer 頭記錄來源頁面 URL,可用於圖片防盜鏈、表單來源校驗。注意:Referer 可偽造,安全場景需配合 Token。

URL 編寫黃金法則

給服務器用(轉發、web.xml 映射):以 / 開頭,不寫 應用上下文名

給瀏覽器用(重定向、超鏈接、AJAX URL):必須包含 應用上下文名

// ✅ 轉發 - 服務器端解析
request.getRequestDispatcher("/index.jsp").forward(req, resp);

// ✅ 重定向 - 瀏覽器端解析
response.sendRedirect("/webTwo/index.jsp"); // 必須帶上下文

RequestDispatcher:轉發核心

特徵:一次請求,共享 request/response,瀏覽器地址欄不變。

三種獲取方式

方法路徑規則適用場景
ServletContext.getRequestDispatcher(path)以 / 開頭,相對應用根目錄通用、推薦
ServletRequest.getRequestDispatcher(path)相對當前資源路徑,可不以 / 開頭相對路徑轉發
ServletContext.getNamedDispatcher(name)web.xml 中 <servlet-name>按名稱轉發 Servlet

典型用法

// 攜帶數據轉發
request.setAttribute("user", userObj);
request.getRequestDispatcher("/detail.jsp").forward(request, response);

亂碼處理:GET/POST 雙重保障

POST 請求:一行搞定

request.setCharacterEncoding("UTF-8"); // 必須在 getParameter() 前調用

GET 請求:手動轉碼(Tomcat 8+ 默認 UTF-8,舊版需配置)

String value = request.getParameter("username");
// ISO-8859-1 → 字節數組 → UTF-8 字符串
String decoded = new String(value.getBytes("ISO-8859-1"), "UTF-8");

原理:Tomcat 默認用 ISO-8859-1 解碼 URL 參數字節,需「逆向還原字節 → 正確編碼解碼」。

Header 批量獲取

// 單值
String ua = request.getHeader("User-Agent");

// 多值(如 Accept-Language)
Enumeration langs = request.getHeaders("Accept-Language");

// 所有 Header 名稱
Enumeration names = request.getHeaderNames();

最佳實踐清單

  1. 獲取參數前:先 setCharacterEncoding,後 getParameter
  2. 轉發路徑:統一用 ServletContext.getRequestDispatcher("/path")
  3. 防盜鏈:Referer 做基礎攔截,核心資源加 Token 驗證
  4. 編碼統一:項目全局 UTF-8,Tomcat server.xml 配置 URIEncoding="UTF-8"
  5. 安全獲取:request.getParameterValues() 防單值覆蓋,配合過濾器統一 XSS/注入防護
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved