servlet過濾器(Filter)詳解(九)
本文實例為大家分享了servlet過濾器的具體代碼,供大家參考,具體內(nèi)容如下
1.servlet過濾器產(chǎn)生背景
項目中我們會遇到這樣一類的需求,對訪問服務(wù)器的用戶ip實施過濾,只有在允許名單中的ip才能訪問服務(wù),為了實現(xiàn)需求,每當有客戶端請求時,我們都會寫校驗ip的代碼,客戶端能夠訪問到的servlet我們都需要這樣做,很明顯這樣做有一個缺點,就是代碼冗余,維護不方便,如果驗證規(guī)則改變,修改起來也特別麻煩。
為了解決以上問題,F(xiàn)ilter 技術(shù)應(yīng)運而生。
2.servlet過濾器是什么?
servlet過濾器是在java servlet 2.3 中定義的。它能夠?qū)ervlet容器傳給servlet組件的ServletRequest 對象和 ServletResponse對象進行檢查和修改。
3.案例
所有servlet過濾器都要實現(xiàn)javax.servlet.Filter接口。
NoteFilter
package com.learn; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2017/09/29. */ public class NoteFilter implements Filter { private FilterConfig config = null; private String ipTable = null; //ip名單 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("note filter initial"); this.config = filterConfig; this.ipTable = config.getInitParameter("ipTable"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("do filter starting"); //校驗ip地址 if(!veryfyIP(request,response)) return; long befor = System.currentTimeMillis(); config.getServletContext().log("before call note Filter"); chain.doFilter(request,response); config.getServletContext().log("after call note Filter"); long after = System.currentTimeMillis(); String name =""; if(request instanceof HttpServletRequest){ name = ((HttpServletRequest) request).getRequestURI(); } config.getServletContext().log("Note Filter : name:"+name +" time :"+(after -befor)+"ms"); } @Override public void destroy() { } private boolean veryfyIP(ServletRequest request, ServletResponse response){ String ip = request.getRemoteAddr(); System.out.println("請求ip:"+ip); System.out.println("ipTable 黑名單:"+ipTable); if(ip.indexOf(ipTable) == -1){ System.out.println("校驗不通過"); response.setContentType("text/html"); PrintWriter out = null; try { out = response.getWriter(); out.print("<h1>對不起,你的ip不能訪問服務(wù)器</h1>"); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } return false; } else { return true; } } }
NoteServlet
package com.learn; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Created by Administrator on 2017/09/29. */ public class NoteServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("已經(jīng)通過了過濾器"); } }
web.xml配置
<filter> <filter-name>ip</filter-name> <filter-class>com.learn.NoteFilter</filter-class> <init-param> <param-name>ipTable</param-name> <param-value>127.0.0.1</param-value> </init-param> </filter> <filter-mapping> <filter-name>ip</filter-name> <url-pattern>/note</url-pattern> </filter-mapping>
<servlet> <servlet-name>note</servlet-name> <servlet-class>com.learn.NoteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>note</servlet-name> <url-pattern>/note</url-pattern> </servlet-mapping>
結(jié)果如下:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實現(xiàn)前端驗證碼圖片生成和校驗
這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)前端驗證碼圖片生成和校驗,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實現(xiàn)單調(diào)棧示例
這篇文章主要為大家介紹了特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實現(xiàn)單調(diào)棧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09Spring Cloud Config實現(xiàn)分布式配置中心
這篇文章主要介紹了Spring Cloud Config實現(xiàn)分布式配置中心,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04Java中ArrayList和LinkedList之間的區(qū)別_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細介紹了Java中ArrayList和LinkedList之間的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05idea插件之如何使用JarEditor編輯Java JAR文件
JarEditor是一款用于在IntelliJIDEA中直接編輯JAR文件的插件,支持反編譯查看和編輯.class文件,并提供即時編譯與保存功能,通過JarEditor,用戶可以在IDE內(nèi)一站式完成JAR文件的編輯、管理和打包操作,提高開發(fā)效率,但在生產(chǎn)環(huán)境中使用前,請確保備份并測試修改2025-01-01