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

Struts2 與 JSP 簡易路徑攔截實作教學

     編輯:Java 綜合教學

Struts2 與 JSP 簡易路徑攔截實作教學

在開發 Java Web 應用程式時,權限控管是不可或缺的環節。本文將示範如何使用 Servlet Filter 搭配 Struts2 框架,實作簡單的路徑攔截機制,保護特定頁面不被未登入用戶存取。

1. 於 web.xml 註冊 Filter

首先在 web.xml 中定義過濾器與對應的 URL 模式,此處採用 /* 攔截所有請求:

<filter>
  <filter-name>UsersFilter</filter-name>
  <filter-class>com.web.UsersFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>UsersFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

2. 實作 UsersFilter 類別

建立 com.web.UsersFilter 實作 javax.servlet.Filter 介面,核心邏輯在 doFilter 方法中:

package com.web;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;

public class UsersFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 統一字元編碼
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        HttpSession session = req.getSession();

        // 取得 Session 中的用戶物件
        Object user = session.getAttribute("user");
        // 取得當前請求 URI
        String url = req.getRequestURI();

        // 若用戶未登入,且請求非公開頁面,則放行並設定快取控制
        if (user == null 
                && url.indexOf("test.jsp") < 0 
                && url.indexOf("comment.jsp") < 0 
                && url.indexOf("link.jsp") < 0) {
            chain.doFilter(request, response);
            res.setHeader("Cache-Control", "no-store");
            res.setDateHeader("Expires", 0);
            res.setHeader("Pragma", "no-cache");
            res.flushBuffer();
        }
    }

    public void destroy() { }
    public void init(FilterConfig arg0) throws ServletException { }
}

3. 邏輯說明

  • 編碼統一:避免中文參數亂碼。
  • Session 判斷:透過 session.getAttribute("user") 確認登入狀態。
  • 白名單機制:test.jsp、comment.jsp、link.jsp 為公開頁面,不需登入即可存取。
  • 快取控制:回應標頭設定 no-store、Expires=0、Pragma=no-cache,防止瀏覽器快取敏感頁面。

4. 進階建議

實務上建議將白名單路徑集中管理(如存放於資料庫或設定檔),並搭配 Struts2 的攔截器機制進行更細緻的權限控管,提升系統彈性與安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved