日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Filter和Listener-学习笔记03【Filter案例】

發布時間:2024/9/30 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Filter和Listener-学习笔记03【Filter案例】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • Java后端 學習路線 筆記匯總表【黑馬程序員】
  • Filter和Listener-學習筆記01【Filter快速入門】
  • Filter和Listener-學習筆記02【Filter細節】
  • Filter和Listener-學習筆記03【Filter案例】
  • Filter和Listener-學習筆記04【監聽器】
  • 目錄

    第3節 Filter案例

    Filter_案例1_登錄驗證_分析

    Filter_案例1_登錄驗證_代碼實現

    Filter_案例2_過濾敏感詞匯_分析

    動態代理1_基本實現步驟

    設計模式——百度百科

    SaleComputer.java、Lenovo.java、ProxyTest.java

    動態代理2_增強方法

    ProxyTest.java

    Filter_案例2_過濾敏感詞匯_實現

    SensitiveWordsFilter.java

    TestServlet.java


    第3節 Filter案例

    Filter_案例1_登錄驗證_分析

    Filter:過濾器
    1. 概念
    2. 快速入門
    3. 過濾器細節
    4. 案例:
    ?? ?1. 案例1_登錄驗證
    ?? ??? ?* 需求:
    ?? ??? ??? ?1. 訪問day17_case案例的資源。驗證其是否登錄
    ?? ??? ??? ?2. 如果登錄了,則直接放行。
    ?? ??? ??? ?3. 如果沒有登錄,則跳轉到登錄頁面,提示"您尚未登錄,請先登錄"。

    案例1_登錄驗證

    Filter_案例1_登錄驗證_代碼實現

    package cn.itcast.web.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException;/*** 登錄驗證的過濾器*/ @WebFilter("/*") public class LoginFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println(req);//0.強制轉換HttpServletRequest request = (HttpServletRequest) req;//1.獲取資源請求路徑String uri = request.getRequestURI();//2.判斷是否包含登錄相關資源路徑,要注意排除掉 css/js/圖片/驗證碼等資源if (uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fonts/") || uri.contains("/checkCodeServlet")) {//包含,用戶就是想登錄。放行chain.doFilter(req, resp);} else {//不包含,需要驗證用戶是否登錄//3.從session獲取中獲取userObject user = request.getSession().getAttribute("user");if (user != null) {//登錄了。放行chain.doFilter(req, resp);} else {//沒有登錄。跳轉登錄頁面request.setAttribute("login_msg", "您尚未登錄,請登錄!");request.getRequestDispatcher("/login.jsp").forward(request, resp);}}// chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}public void destroy() {}}

    Filter_案例2_過濾敏感詞匯_分析

    案例2_敏感詞匯過濾
    ? ? * 需求:
    ?? ??? ??? ?1. 對day17_case案例錄入的數據進行敏感詞匯過濾
    ?? ??? ??? ?2. 敏感詞匯參考《敏感詞匯.txt》
    ?? ??? ??? ?3. 如果是敏感詞匯,替換為 ***?

    過濾敏感詞匯

    動態代理1_基本實現步驟

    案例2_敏感詞匯過濾
    ?? ??? ?* 需求:
    ?? ??? ??? ?1. 對day17_case案例錄入的數據進行敏感詞匯過濾
    ?? ??? ??? ?2. 敏感詞匯參考《敏感詞匯.txt》
    ?? ??? ??? ?3. 如果是敏感詞匯,替換為 ***?
    ?? ??? ?* 分析:
    ?? ??? ??? ?1. 對request對象進行增強。增強獲取參數相關方法
    ?? ??? ??? ?2. 放行。傳遞代理對象
    ?? ??? ?* 增強對象的功能:
    ?? ??? ??? ?* 設計模式:一些通用的解決固定問題的方式
    ?? ??? ??? ?1. 裝飾模式
    ?? ??? ??? ?2. 代理模式
    ?? ??? ??? ??? ?* 概念:
    ?? ??? ??? ??? ??? ?1. 真實對象:被代理的對象
    ?? ??? ??? ??? ??? ?2. 代理對象:
    ?? ??? ??? ??? ??? ?3. 代理模式:代理對象代理真實對象,達到增強真實對象功能的目的
    ?? ??? ??? ? ?? ?* 實現方式:
    ?? ??? ??? ??? ? ?? ?1. 靜態代理:有一個類文件描述代理模式
    ?? ??? ??? ??? ? ?? ?2. 動態代理:在內存中形成代理類
    ?? ??? ??? ??? ??? ??? ?* 實現步驟:
    ?? ??? ??? ??? ??? ??? ??? ?1. 代理對象和真實對象實現相同的接口
    ?? ??? ??? ??? ??? ??? ??? ?2. 代理對象 = Proxy.newProxyInstance();
    ?? ??? ??? ??? ??? ??? ??? ?3. 使用代理對象調用方法。
    ?? ??? ??? ??? ??? ??? ??? ?4. 增強方法

    代理

    設計模式——百度百科

    SaleComputer.java、Lenovo.java、ProxyTest.java

    動態代理2_增強方法

    Filter:過濾器
    1. 概念
    2. 快速入門
    3. 過濾器細節
    4. 案例:
    ?? ?1. 案例1_登錄驗證
    ?? ??? ?* 需求:
    ?? ??? ??? ?1. 訪問day17_case案例的資源。驗證其是否登錄
    ?? ??? ??? ?2. 如果登錄了,則直接放行。
    ?? ??? ??? ?3. 如果沒有登錄,則跳轉到登錄頁面,提示"您尚未登錄,請先登錄"。
    ?? ?2. 案例2_敏感詞匯過濾
    ?? ??? ?* 需求:
    ?? ??? ??? ?1. 對day17_case案例錄入的數據進行敏感詞匯過濾
    ?? ??? ??? ?2. 敏感詞匯參考《敏感詞匯.txt》
    ?? ??? ??? ?3. 如果是敏感詞匯,替換為 ***?
    ?? ??? ?* 分析:
    ?? ??? ??? ?1. 對request對象進行增強。增強獲取參數相關方法
    ?? ??? ??? ?2. 放行。傳遞代理對象
    ?? ??? ?* 增強對象的功能:
    ?? ??? ??? ?* 設計模式:一些通用的解決固定問題的方式
    ?? ??? ??? ?1. 裝飾模式
    ?? ??? ??? ?2. 代理模式
    ?? ??? ??? ??? ?* 概念:
    ?? ??? ??? ??? ??? ?1. 真實對象:被代理的對象
    ?? ??? ??? ??? ??? ?2. 代理對象:
    ?? ??? ??? ??? ??? ?3. 代理模式:代理對象代理真實對象,達到增強真實對象功能的目的
    ?? ??? ??? ? ?? ?* 實現方式:
    ?? ??? ??? ??? ? ?? ?1. 靜態代理:有一個類文件描述代理模式
    ?? ??? ??? ??? ? ?? ?2. 動態代理:在內存中形成代理類
    ?? ??? ??? ??? ??? ??? ?* 實現步驟:
    ?? ??? ??? ??? ??? ??? ??? ?1. 代理對象和真實對象實現相同的接口
    ?? ??? ??? ??? ??? ??? ??? ?2. 代理對象 = Proxy.newProxyInstance();
    ?? ??? ??? ??? ??? ??? ??? ?3. 使用代理對象調用方法。
    ?? ??? ??? ??? ??? ??? ??? ?4. 增強方法
    ?? ??? ??? ??? ??? ??? ?* 增強方式:
    ?? ??? ??? ??? ??? ??? ??? ?1. 增強參數列表
    ?? ??? ??? ??? ??? ??? ??? ?2. 增強返回值類型
    ?? ??? ??? ??? ??? ??? ??? ?3. 增強方法體執行邏輯

    ProxyTest.java

    package cn.itcast.proxy;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class ProxyTest {public static void main(String[] args) {//1.創建真實對象Lenovo lenovo = new Lenovo();//2.動態代理增強lenovo對象/*三個參數:1. 類加載器:真實對象.getClass().getClassLoader()2. 接口數組:真實對象.getClass().getInterfaces()3. 處理器:new InvocationHandler()*/SaleComputer proxy_lenovo = (SaleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() {/*代理邏輯編寫的方法:代理對象調用的所有方法都會觸發該方法(執行)參數:1. proxy:代理對象2. method:代理對象調用的方法,被封裝為的對象3. args:代理對象調用的方法時,傳遞的實際參數*/@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {/*System.out.println("該方法執行了....");System.out.println(method.getName());System.out.println(args[0]);*///判斷是否是sale方法if (method.getName().equals("sale")) {//1.增強參數double money = (double) args[0];money = money * 0.85;System.out.println("專車接你...");//使用真實對象調用該方法String obj = (String) method.invoke(lenovo, money);System.out.println("免費送貨...");//2.增強返回值return obj + "_鼠標墊";} else {Object obj = method.invoke(lenovo, args);return obj;}}});//3.調用方法String computer = proxy_lenovo.sale(8000);System.out.println(computer);proxy_lenovo.show();} }

    Filter_案例2_過濾敏感詞匯_實現

    SensitiveWordsFilter.java

    package cn.itcast.web.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List;/*** 敏感詞匯過濾器*/ @WebFilter("/*") public class SensitiveWordsFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//1.創建代理對象,增強getParameter方法ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//增強getParameter方法//判斷是否是getParameter方法if (method.getName().equals("getParameter")) {//增強返回值//獲取返回值String value = (String) method.invoke(req, args);if (value != null) {for (String str : list) {if (value.contains(str)) {value = value.replaceAll(str, "***");}}}return value;}//判斷方法名是否是 getParameterMap//判斷方法名是否是 getParameterValuereturn method.invoke(req, args);}});//2.放行chain.doFilter(proxy_req, resp);}private List<String> list = new ArrayList<String>();//敏感詞匯集合public void init(FilterConfig config) throws ServletException {try {//1.獲取文件真實路徑ServletContext servletContext = config.getServletContext();String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感詞匯.txt");//2.讀取文件BufferedReader br = new BufferedReader(new FileReader(realPath)); // 默認GBK編碼//3.將文件的每一行數據添加到list中String line = null;while ((line = br.readLine()) != null) {list.add(line);}br.close();System.out.println(list);} catch (Exception e) {e.printStackTrace();}}public void destroy() {}}

    TestServlet.java

    package cn.itcast.web.servlet;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/testServlet") public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");String msg = request.getParameter("msg");System.out.println(name + ":" + msg);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }

    加油~

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的Filter和Listener-学习笔记03【Filter案例】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。