生活随笔
收集整理的這篇文章主要介紹了
java过滤器放行_过滤器学习
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
過濾器學(xué)習(xí):
問題:
目前我們訪問Servlet,是可以直接進(jìn)行訪問的,沒有進(jìn)行任何防護(hù)。可能會造成服務(wù)器資源的浪費,以及安全性不高。我們希望在請求被Servlet處理之前,進(jìn)行一次請求的校驗,符合要求再調(diào)用對應(yīng)的Servlet進(jìn)行請求處理。
解決:
使用過濾器。
作用:
過濾器是處于客戶端與服務(wù)器資源文件之間的一道過濾網(wǎng),在訪問資源文件之前,通過一系列的過濾器對請求進(jìn)行修改、判斷等,把不符合規(guī)則的請求在中途攔截或修改。也可以對響應(yīng)進(jìn)行過濾,攔截或修改響應(yīng)。對服務(wù)器資源進(jìn)行管理,保護(hù) servlet。
使用:
創(chuàng)建一個普通java類并實現(xiàn)過濾器接口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>
技能點:
作用:服務(wù)器在接收到瀏覽器發(fā)過來的請求后,先解析請求信息,創(chuàng)建對象request和response,然后根據(jù)請求URL地址判斷是否符合過濾器的過濾范圍,符合則會調(diào)用過濾器中的doFilter方法來進(jìn)行請求攔截,并將request和response對象作為實參傳遞給doFilter方法。我們可以在doFilter方法中聲明過濾器攔截代碼。
參數(shù):ServletRequest:接收此次攔截的請求的request實參ServletResponse:接收此次攔截的請求的response實參FilterChain:可以進(jìn)行請求放行chain.doFilter(request, response);
- 技能點二:過濾器之init方法和destroy方法
init方法:服務(wù)器啟動時調(diào)用,服務(wù)器啟動時候完成了過濾器的加載
destroy方法:服務(wù)器關(guān)閉時調(diào)用,服務(wù)器關(guān)閉時候完成了過濾器的銷毀
證明:過濾器的生命周期為從服務(wù)器開啟到服務(wù)器關(guān)閉
攔截所有:/*
攔截部分Servlet的請求:*.do
攔截指定Servlet的請求:和要攔截的指定的Servlet的url-pattern配置完全一致即可,例如:/my
注意:1.過濾器之間會出現(xiàn)多重攔截,如果是按照攔截攔截范圍的大小在web.xml中自大而小進(jìn)行的配置則會先執(zhí)行大范圍的攔截器,再執(zhí)行小范圍的攔截器。2.攔截順序與web.xml配置的順序有關(guān),因此建議要按照攔截范圍的大小進(jìn)行自大而小的配置
代碼示例:
創(chuàng)建一個普通java類并實現(xiàn)過濾器接口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(我是小區(qū)門口保安)");//放行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. 網(wǎng)頁請求servlet處理
請求servlet
4. 處理結(jié)果
按照web.xml中的配置順序進(jìn)行了自大而小的攔截
總結(jié)
以上是生活随笔為你收集整理的java过滤器放行_过滤器学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。