struts2的攔截器(Interceptor)與過濾器(Filter)

来源:http://www.cnblogs.com/ZhangSeachal/archive/2016/04/07/5362375.html
-Advertisement-
Play Games

一.攔截器與過濾器的區別: 1.filter基於回調函數,我們需要實現的filter介面中doFilter方法就是回調函數,而interceptor則基於Java本身的反射機制,這是兩者最本質的區別。 2.filter是依賴於servlet容器的,即只能在servlet容器中執行,很顯然沒有serv ...


一.攔截器與過濾器的區別:
  1.filter基於回調函數,我們需要實現的filter介面中doFilter方法就是回調函數,而interceptor則基於Java本身的反射機制,這是兩者最本質的區別。
  2.filter是依賴於servlet容器的,即只能在servlet容器中執行,很顯然沒有servlet容器就無法來回調doFilter方法。而interceptor與servlet容器無關。
  3.Filter的過濾範圍比Interceptor大,Filter除了過濾請求外通過通配符可以保護頁面,圖片,文件等等,而Interceptor只能過濾請求。
  4.Filter的過濾例外一般是在載入的時候在init方法聲明,而Interceptor可以通過在xml聲明是guest請求還是user請求來辨別是否過濾。
二.應用
filter:常用於系統許可權管理(即用戶訪問某些頁面之前,進行Filter許可權檢查);
 Interceptor:只是在程式訪問Action之前進行攔截。常用於記錄系統操作日誌,或添加額外功能。
felter的三個實例:

(1)-------<利用filter進行中文字元處理>------------
1)
在web.xml中的配置:
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.lxh.myzngt.filter.EncodingFilter
</filter-class>
  <init-param>
<param-name>charset</param-name>
<param-value>gbk</param-value>
</init-param>

</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>
private String[] doNotFilterURL; ?public void init(FilterConfig filterConfig) throws ServletException {
String params = filterConfig.getInitParameter("doNotFilterURL");
if (params != null) {
String urls[] = params.split(",");
doNotFilterURL = new String[urls.length];
for (int i = 0, size = urls.length; i < size; i++) {
doNotFilterURL[i] = urls[i];
}
}
}

HttpServletRequest req = (HttpServletRequest) request;
  String requestPath = req.getRequestURI(); //如:demo/login.action
  String contextRoot = req.getContextPath(); //如:demo int length = contextRoot.length();
  String path = requestPath.substring(length); //如:/login.action
if (path != null && path.length() != 0) {
path = path.trim();
}
if (Constants.FIRST_LOGIN_URL.getStringValue().equals(path)) {
return true;
}
//獲取請求的地址,比對不需要過濾的URL的數組doNotFilterURL。
boolean doNotFilter = false;
if (doNotFilterURL != null) {
for (String url : doNotFilterURL) { if (url != null && path.contains(url.trim())) {
doNotFilter = true;
break;
}
}
} //對不屬於不用過濾的,查詢數據表,看用戶是否有權訪問。若沒,則返回提示用戶無限訪問頁面。若有,則直接通過。 }
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好久沒寫過雙緩存了,趁現在有空重新溫習下。 我們經常聽說雙緩存,但是很少使用多緩存,起碼大多數情況下是這樣吧。為什麼不需要多緩衝呢,今天分析下。並不是緩衝區越多越好,這個需要考慮具體的應用場景。我們抽象假設一下應用場景,為了簡化場景,假設只有一個讀線程和一個寫線程,設讀時間為rt,寫時間為wt,有三 ...
  • 易偉微信公眾平臺介面傻瓜教程部分內容:微信介面9超鏈接.rmvb微信介面8音樂信息.rmvb微信介面7圖文信息.rmvb微信介面6關註回覆.rmvb微信介面5關鍵詞回覆.rmvb微信介面50連闖三關.rmvb微信介面4介面驗證.rmvb微信介面49簡答題.rmvb微信介面48正則表達式.rmvb微信 ...
  • 早就聽說了dubbo的好處,但是在項目中一直沒有使用的機會,所以一直不知道怎麼使用。今天晚上有空,簡單的學習一下 就當入個門,以後項目中遇到的話,那麼使用起來就比較簡單了,至於介紹的話,我就不總結了,其實就是很好的解決了分散式 管理的問題,並且操作起來非常的方便。 下麵這張圖是從官網上截圖的 節點角 ...
  • 協同過濾常常被用於分辨某位特定顧客可能感興趣的東西,這些結論來自於對其他相似顧客對哪些產品感興趣的分析。協同過濾以其出色的速度和健壯性,在全球互聯網領域炙手可熱。 ...
  • 1.Behaviour介紹 Erlang/Elixir的Behaviour類似於其它語言中的介面(interfaces),本質就是在指定behaviours的模塊中強制要求導出一些指定的函數,否則編譯時會warning。 其中Elixir中使用到behaviour的典範就是GenServer, Ge ...
  • 一、php環境配置: 二、zendstudio Eclipse +xdebug 開發php環境軟體下載: 三、安裝配置如下: extension=php_xdebugvc6.dll [Xdebug] xdebug.profiler_enable=on xdebug.trace_output_dir= ...
  • 現在記錄下Gridview的相關內容,也是強迫症犯了,Yii2自帶的Gridview雖然不錯,但是過濾欄如果一些欄位用不著,不會自動合併成一行,當然也可以過濾欄不用,而是在最上方自己寫一些需要檢索的數據,但是這樣很麻煩,還要自己去規劃樣式,寫檢索什麼的。正好在搜索將檢索欄和標題合併時,看到了kart ...
  • 一、IDE介紹 ① 什麼是IDE? 1、 IDE全稱是”Integrated Development Environment”,中文稱為“集成開發環境”; 2、是用於提供程式開發環境的應用程式,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面工具。就是集成了代碼編寫功能、分析功能、編譯功能、調試功能 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...