生活随笔
收集整理的這篇文章主要介紹了
java过滤器放行_过滤器学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
過濾器學習:
問題:
目前我們訪問Servlet,是可以直接進行訪問的,沒有進行任何防護。可能會造成服務器資源的浪費,以及安全性不高。我們希望在請求被Servlet處理之前,進行一次請求的校驗,符合要求再調用對應的Servlet進行請求處理。
解決:
使用過濾器。
作用:
過濾器是處于客戶端與服務器資源文件之間的一道過濾網,在訪問資源文件之前,通過一系列的過濾器對請求進行修改、判斷等,把不符合規則的請求在中途攔截或修改。也可以對響應進行過濾,攔截或修改響應。對服務器資源進行管理,保護 servlet。
使用:
創建一個普通java類并實現過濾器接口Filter(javax.servlet包下的Filter)在web.xml中配置過濾器<filter><filter-name>配置的過濾器名稱</filter-name><filter-class>要配置的過濾器的全限定路徑:包名.類名</filter-class>
</filter>
<filter-mapping><filter-name>配置的過濾器名稱</filter-name><url-pattern>過濾器攔截請求地址的范圍</url-pattern>
</filter-mapping>注意:<filter>和<filter-mapping>中屬性<filter-name>要配置的過濾器名稱要一致示例:
<filter><filter-name>myFilter</filter-name><filter-class>com.bjsxt.filter.MyFilter</filter-class>
</filter>
<filter-mapping><filter-name>myFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
技能點:
作用:服務器在接收到瀏覽器發過來的請求后,先解析請求信息,創建對象request和response,然后根據請求URL地址判斷是否符合過濾器的過濾范圍,符合則會調用過濾器中的doFilter方法來進行請求攔截,并將request和response對象作為實參傳遞給doFilter方法。我們可以在doFilter方法中聲明過濾器攔截代碼。
參數:ServletRequest:接收此次攔截的請求的request實參ServletResponse:接收此次攔截的請求的response實參FilterChain:可以進行請求放行chain.doFilter(request, response);
- 技能點二:過濾器之init方法和destroy方法
init方法:服務器啟動時調用,服務器啟動時候完成了過濾器的加載
destroy方法:服務器關閉時調用,服務器關閉時候完成了過濾器的銷毀
證明:過濾器的生命周期為從服務器開啟到服務器關閉
攔截所有:/*
攔截部分Servlet的請求:*.do
攔截指定Servlet的請求:和要攔截的指定的Servlet的url-pattern配置完全一致即可,例如:/my
注意:1.過濾器之間會出現多重攔截,如果是按照攔截攔截范圍的大小在web.xml中自大而小進行的配置則會先執行大范圍的攔截器,再執行小范圍的攔截器。2.攔截順序與web.xml配置的順序有關,因此建議要按照攔截范圍的大小進行自大而小的配置
代碼示例:
創建一個普通java類并實現過濾器接口Filter(javax.servlet包下的Filter)MyServlet:
package com.bj.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class MyServlet*/
@WebServlet("/my.do")
public class MyServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("張三家被訪問了");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}MyFilter:
package com.bj.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;public class MyFilter implements Filter{@Overridepublic void destroy() {System.out.println("MyFilter.destroy()");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {System.out.println("MyFilter.doFilter(我是小區門口保安)");//放行chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("MyFilter.init()");}
}MyFilter2:省略部分代碼,省略部分參照MyFilter
public class MyFilter2 implements Filter{@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {System.out.println("MyFilter2.doFilter(我是樓門口的保安)");chain.doFilter(request, response);}
}MyFilter3:省略部分代碼,省略部分參照MyFilter
public class MyFilter3 implements Filter{@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {System.out.println("MyFilter3.doFilter(我是張三家門口的保安)");chain.doFilter(request, response);}
}
2. 在web.xml中配置過濾器
<!-- 過濾器配置:攔截所有 --><filter><filter-name>myFilter</filter-name><filter-class>com.bj.filter.MyFilter</filter-class></filter><filter-mapping><filter-name>myFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 過濾器配置:攔截部分 --><filter><filter-name>myFilter2</filter-name><filter-class>com.bj.filter.MyFilter2</filter-class></filter><filter-mapping><filter-name>myFilter2</filter-name><url-pattern>*.do</url-pattern></filter-mapping><!-- 過濾器配置:攔截指定的Servlet的請求 --><filter><filter-name>myFilter3</filter-name><filter-class>com.bj.filter.MyFilter3</filter-class></filter><filter-mapping><filter-name>myFilter3</filter-name><url-pattern>/my.do</url-pattern></filter-mapping>
3. 網頁請求servlet處理
請求servlet
4. 處理結果
按照web.xml中的配置順序進行了自大而小的攔截
總結
以上是生活随笔為你收集整理的java过滤器放行_过滤器学习的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。