- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 詳解JavaWeb中的過(guò)濾器Filter
1.Filter過(guò)濾器的作用:攔截請求
2.攔截請求常見(jiàn)場(chǎng)景:
(1)權限檢查
(2)日記操作
(3)事務(wù)管理
Filter 過(guò)濾器的使用步驟:
1、編寫(xiě)一個(gè)類(lèi)去實(shí)現Filter 接口
2、實(shí)現過(guò)濾方法doFilter()
3、到web.xml 中去配置Filter 的攔截路徑
web工程下新建一個(gè)admin目錄,作為需要權限才能訪(fǎng)問(wèn)的目錄,其中有兩個(gè)文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>導航</title> </head> <body> <table> <tr> <td> 百度<input type="text"> </td> </tr> <tr> <td> Google<input type="text"> </td> </tr> <tr> <td> 必應<input type="text"> </td> </tr> </table> </body> </html>
package com.filter.filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.IOException; /** * @author ningqian * @create -05-16 20:17 */ //注意導包是javax public class FilterServlet implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("來(lái)到Filter過(guò)濾器"); HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest; HttpSession session = httpServletRequest.getSession(); //如果session的屬性user為空,轉發(fā)到首頁(yè) if(session.getAttribute("user")==null){ servletRequest.getRequestDispatcher("/index.jsp").forward(servletRequest,servletResponse); } else{//如果session的屬性user不為空,則放行 filterChain.doFilter(servletRequest,servletResponse); } } @Override public void destroy() { } }
package com.filter.filter; import java.io.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(name = "helloServlet", value = "/hello-servlet") public class HelloServlet extends HttpServlet { private String message; public void init() { message = "Hello World!"; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); // Hello PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>" + message + "</h1>"); out.println("</body></html>"); HttpSession session = request.getSession(); session.setAttribute("user","ningqian"); } public void destroy() { } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <filter> <filter-name>FilterServlet</filter-name> <filter-class>com.filter.filter.FilterServlet</filter-class> </filter> <filter-mapping> <filter-name>FilterServlet</filter-name> <!--表示受限的文件--> <url-pattern>/admin/*</url-pattern> </filter-mapping> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.filter.filter.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <filter> <filter-name>FilterServlet</filter-name> <filter-class>com.filter.filter.FilterServlet</filter-class> </filter> <filter-mapping> <filter-name>FilterServlet</filter-name> <!--表示受限的文件--> <url-pattern>/admin/*</url-pattern> </filter-mapping> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.filter.filter.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
1.啟動(dòng)服務(wù)器
2.在瀏覽器地址欄輸入:http:localhost:8080/filter/admin/1.jpg
表示直接訪(fǎng)問(wèn)admin目錄下的圖片
由于此目錄下的文件在web.xml中配置為受限,所以此時(shí)請求被FilterServlet收到,使用doFilter方法進(jìn)行請求過(guò)濾檢查,發(fā)現會(huì )話(huà)session中沒(méi)有user屬性,所以將該請求轉發(fā)到index.jsp
3.在瀏覽器地址欄輸入:http:localhost:8080/filter/
首頁(yè)不在受限的目錄下,所以可以直接訪(fǎng)問(wèn),點(diǎn)擊頁(yè)面上的鏈接Hello Servlet,此時(shí),將請求發(fā)到服務(wù)器,HelloServlet程序接收,通過(guò)doGet()方法,給會(huì )話(huà)session的user賦值
4.再次在瀏覽器輸入:http:localhost:8080/filter/admin/1.jpg,此時(shí)就可以正常訪(fǎng)問(wèn)。
Filter 的生命周期包含幾個(gè)方法
1、構造器方法
2、init 初始化方法
第1,2 步,在web 工程啟動(dòng)的時(shí)候執行(Filter 已經(jīng)創(chuàng )建)
3、doFilter 過(guò)濾方法
第3 步,每次攔截到請求,就會(huì )執行
4、destroy 銷(xiāo)毀
第4 步,停止web 工程的時(shí)候,就會(huì )執行(停止web 工程,也會(huì )銷(xiāo)毀Filter 過(guò)濾器)
FilterConfig 類(lèi)見(jiàn)名知義,它是Filter 過(guò)濾器的配置文件類(lèi)。
Tomcat 每次創(chuàng )建Filter 的時(shí)候,也會(huì )同時(shí)創(chuàng )建一個(gè)FilterConfig 類(lèi),這里包含了Filter 配置文件的配置信息。
FilterConfig 類(lèi)的作用是獲取filter 過(guò)濾器的配置內容
1、獲取Filter 的名稱(chēng)filter-name 的內容:filterConfig.getFilterName()
2、獲取在Filter 中配置的init-param 初始化參數(在web.xml中配置):filterConfig.getInitParameter(“username”)
3、獲取ServletContext 對象:filterConfig.getServletContext()
<!--filter 標簽用于配置一個(gè)Filter 過(guò)濾器--> <filter> <!--給filter 起一個(gè)別名--> <filter-name>AdminFilter</filter-name> <!--配置filter 的全類(lèi)名--> <filter-class>com.atguigu.filter.AdminFilter</filter-class> <init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost3306/test</param-value> </init-param> </filter>
多個(gè)過(guò)濾器
Filter 過(guò)濾器它只關(guān)心請求的地址是否匹配,不關(guān)心請求的資源是否存在?。?!
<url-pattern>/admin/*</url-pattern>
<url-pattern>*.html</url-pattern>
到此這篇關(guān)于詳解JavaWeb中的過(guò)濾器Filter的文章就介紹到這了,更多相關(guān)JavaWeb Filter內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站