1. 程式人生 > >java過濾器——filter的使用和配置

java過濾器——filter的使用和配置

       在做DRP的過程中用到了filter。前幾天昌哥和歡姐在小會議室向我們介紹了AOP的思想,用到filter時覺得它們兩者特別相似。

       如下圖:

        

       javaweb開發中,request和response是兩個必不可少的物件,他們是在接收到每一次客戶端請求後,由web伺服器產生的。filter可以在request到達servlet之前和response即離開servlet時分別對它們進行處理。

       filter常常用於網站過濾敏感詞彙、設定字符集、日誌等比較“公共性”的事件處理中。

在我們正常的程式設計中,每一條線,都是從上到下依次呼叫,而filter是在每一個完整的呼叫中橫著“切了一刀”。通過配置,它可以對任意程式碼路徑進行過濾。

       這裡以轉碼/設定字符集為例,簡單瞭解一下如何使用filter。

       建立Filter

       CharsetEncodingFilter.java

package com.drp.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**採用filter統一處理filter
 * @author Danny
 *
 */
public class CharsetEncodingFilter implements Filter {

	@Override
	public void destroy() {}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("CharsetEncodingFilter---->>>>Filter開始");
		request.setCharacterEncoding("utf-8");    //設定字符集
		chain.doFilter(request, response);    //繼續執行
                System.out.println("CharsetEncodingFilter---->>>>Filter結束");
	}

	@Override
	public void init(FilterConfig config) throws ServletException {}

}

       此過濾器CharsetEncodingFilter實現了javax.servlet.Filter介面(任何filter過濾器也必須實現這個介面);在伺服器建立此filter並進行初始化執行init方法時,讀取配置檔案並存入FilterConfigure的物件中;實現doFilter方法,在請求到達jsp之前將字符集編碼設定為utf-8,chain.doFiler()方法的作用是在對request物件進行處理之後,跳轉到被攔截的servlet繼續執行,執行完之後還要回到此處,chain.doFilter()下面還可以對response物件進行處理。

       配置filter

       web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <filter>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<filter-class>com.drp.filter.CharsetEncodingFilter</filter-class>
  </filter>
  <filter-mapping><!-- 此filter對所有的jsp頁面都有過濾效果 -->
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>*.jsp</url-pattern>
  </filter-mapping>
</web-app>

       此處配置所起的作用是,此filter對所有的jsp頁面都有設定字符集的效果,當每次訪問jsp頁面時,都會執行filter中的doFilter()方法,因此每次訪問jsp頁面前後,都可以在Console中看到doFilter方法輸出的 “ CharsetEncodingFilter---->>>>Begin ” 和 “CharsetEncodingFilter---->>>>End ”。

       除此之外還有其他幾種對filter作用域配置的方式:

       對所有的物件都有過濾效果

<filter-mapping>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
</filter-mapping>
        對sysmgr下的所有物件都有過濾效果,無論是servlet還是jsp
<filter-mapping>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>/sysmgr/*</url-pattern>
</filter-mapping>
         只對指定的servlet具有過濾效果
<filter-mapping>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>/servlet/LoginServlet</url-pattern>
</filter-mapping>



      至此,無論訪問哪個jsp頁面,都會事先設定其字符集,不用分別對每個頁面都進行設定了。

相關推薦

java過濾器——filter的使用配置

       在做DRP的過程中用到了filter。前幾天昌哥和歡姐在小會議室向我們介紹了AOP的思想,用到filter時覺得它們兩者特別相似。        如下圖:             

Java過濾器Filter的原理及配置_學習筆記

ava .cn -1 求和 pattern 資源 分享 java過濾器 服務器 Filter中文意思為過濾器。顧名思義,過濾器可在瀏覽器以及目標資源之間起到一個過濾的作用。例如:水凈化器,可以看成是生活中的一個過濾器,他可以將汙水中的雜質過濾,從而使進入的汙水變成凈水。 對

java開發以太坊過濾器(filter)智能合約事件(event)

java web3j filter event 以太坊 ethereum 區塊鏈 智能合約 過濾器 事件 web3j過濾器提供以太坊網絡發生的某些事件的通知,對java和安卓程序員來說很有用。在Ethereum以太坊中支持三類過濾器:

java 過濾器Filter中chain.doFilter()之前之後程式碼的執行順序

過濾器攔截到請求之後,首先是執行doFilter()方法中chain.doFilter()之前的程式碼,然後放棄許可權給下一個過濾器或者serverlet等等,最後才執行chain.doFilter()之後的程式碼。 測試場景: 1.新建一個index.html,配置連線調整到一個test.

SpringBoot2.x過濾器Filter使用Servlet3.0配置自定義Filter實戰

補充:SpringBoot啟動日誌 1、深入SpringBoot2.x過濾器Filter和使用Servlet3.0配置自定義Filter實戰(核心知識)   簡介:講解SpringBoot裡面Filter講解和使用Servlet3.0配置自定義Filter實戰   filter簡單理解:人--->

SpringBoot系列過濾器filter監聽器listener配置

一、過濾器 1、新建過濾器類實現Filter介面 package com.jd.m.tg.filter; import org.slf4j.Logger; import org.slf4j.Log

過濾器Filter配置文件中不起作用

-c 文件夾 -name 都是 文件中 不起作用 gin utl 項目 web.xml內容 <filter> <filter-name>LoginFilter</filter-name> <filter-class>com.s

java過濾器Filter筆記

意義 執行 cut rup 過濾器 sch www 內容 map 一、Filter簡介  Filter也稱之為過濾器,它是Servlet技術中最激動人心的技術之一,WEB開發人員通過Filter技術,對web服務器管理的所有web資源:例如Jsp,Servlet, 靜態圖片

Java的安裝配置環境變數

1.安裝    下載網址:www.oracle.com         配置Java環境變數

Java過濾器Filter使用詳解(轉載自別人的文章,感覺很不錯,適合我這樣的小白)

Java過濾器Filter使用詳解    轉載請註明原文地址:http://www.cnblogs.com/ygj0930/p/6374212.html  在我的專案中有具體應用:https://github.com/ygj0930/CoupleSpace

java 過濾器(Filter)

java過濾器有很多用處比如:一些需要過濾器的情況:      (1)認證Filter     (2)日誌和稽核Filter     (3)圖片轉換Filter &nbs

JDK(JAVA)的安裝配置

一、下載jdk 下載jdk可以去官網下載,百度裡搜尋會有一大堆,jdk1.6,jdk1.7,jdk1.8都可以, 選擇跟自己電腦操作版本匹配的64位或者32位 官網地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-download

[Java 18_002] Filter Interceptor

首先,在 JSP / Servlet 規範中,只定義了 Servlet,Filter,和 Listener;並沒有定義 Interceptor。Interceptor 是某些 MVC 框架中的角色。 Servlet,Filter,Listener 定義在 web.xml 中;而 In

過濾器filter監聽器listener

File 過濾器的作用 過濾器使用的場景: 一段程式碼重複的在某個地方出現 使用過濾器的步驟: 1.開發一個過濾器 2.指定過濾的條件,和路徑 配置 web.xm

Java過濾器Filter詳解

一、過濾器的定義: 過濾器是處於客戶端與伺服器資原始檔之間的一道過濾網,在訪問資原始檔之前,通過一系列的過濾器對請求進行修改、判斷等,把不符合規則的請求在中途攔截或修改。也可以對響應進行過濾,攔截或修改響應。 如圖,瀏覽器發出的請求先遞交給第一個filter進行過濾,符合規則則放行

防止常見XSS 過濾 SQL注入 JAVA過濾器filter

XSS : 跨站指令碼攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站指令碼攻擊縮寫為XSS。惡意攻擊者往Web頁面裡插入惡意html程式碼,當用戶瀏覽該頁之時,嵌入其中Web裡

使用命令列進行java版本檢視配置測試

命令列的使用 Java版本和配置測試:   先開啟所在檔案: 刪除.class檔案:   編譯執行: 需要注意的是,在命令列執行程式時,不能使用副檔名.class。要用java clas

web3j開發以太坊過濾器(filter)智慧合約事件(event)

web3j過濾器提供以太坊網路發生的某些事件的通知,對java和安卓程式設計師來說很有用。在Ethereum以太坊中支援三類過濾器: 塊濾波器(Block filters) 未決交易過濾器(Pending transaction filters) 主題過濾器(Topic

Linux下安裝java的jdk配置環境變數

每次感覺配這個超級簡單 但是每次都要查下 記一下好了 Linux下安裝jdk,步驟如下    1:下載jdk包:本章使用的為字尾為tar.gz的檔案(不需要安裝),如jdk-8u111-linux-x64.tar.gz   下載RPM包: wget --no-check-certificate --no-co

tomcat全域性過濾器Filter專案的過濾器Filter載入順序問題

目前需求是用tomcat下的conf/web.xml做全域性Filter.但是發現頁面請求都優先進入了專案WEB-INF/web.xml的filter中去.按理說多filter的執行順序是按照宣告順序來進行的,可是像這種