您好,登錄后才能下訂單哦!
本文實(shí)例為大家分享了servlet過濾器的具體代碼,供大家參考,具體內(nèi)容如下
1.servlet過濾器產(chǎn)生背景
項(xiàng)目中我們會(huì)遇到這樣一類的需求,對(duì)訪問服務(wù)器的用戶ip實(shí)施過濾,只有在允許名單中的ip才能訪問服務(wù),為了實(shí)現(xiàn)需求,每當(dāng)有客戶端請(qǐng)求時(shí),我們都會(huì)寫校驗(yàn)ip的代碼,客戶端能夠訪問到的servlet我們都需要這樣做,很明顯這樣做有一個(gè)缺點(diǎn),就是代碼冗余,維護(hù)不方便,如果驗(yàn)證規(guī)則改變,修改起來也特別麻煩。
為了解決以上問題,F(xiàn)ilter 技術(shù)應(yīng)運(yùn)而生。
2.servlet過濾器是什么?
servlet過濾器是在java servlet 2.3 中定義的。它能夠?qū)ervlet容器傳給servlet組件的ServletRequest 對(duì)象和 ServletResponse對(duì)象進(jìn)行檢查和修改。
3.案例
所有servlet過濾器都要實(shí)現(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"); //校驗(yàn)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("請(qǐng)求ip:"+ip); System.out.println("ipTable 黑名單:"+ipTable); if(ip.indexOf(ipTable) == -1){ System.out.println("校驗(yàn)不通過"); response.setContentType("text/html"); PrintWriter out = null; try { out = response.getWriter(); out.print("<h2>對(duì)不起,你的ip不能訪問服務(wù)器</h2>"); 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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。