攔截器java,spring攔截器

本文目錄一覽:

Java中的過濾器、攔截器、監聽器分別是什麼意思?

王朝*說的很全面了,翻閱了幾本資料後,從J2EE的角度略作補充吧。

1)首先是攔截器,攔截器是一種面向方面/切面編程(AOP Aspect-Oriented Programming),而面向切面就是將多個模塊的的通用服務進行分離,如權限管理、日誌服務,他們在多個模塊中都會用到,就可以將其各自封裝為一個可重用模塊。而這些通用服務的具體實現是通過攔截器來完成,比如用戶客戶端訪問一些保密模塊都應先通過權限審查的攔截器來進行權限審查,確定用戶是否具有該項操作的權限後方能向下執行。

2)過濾器,過濾器處於客戶端與Web資源(Servlet、JSP、HTML)之間,客戶端與Web資源之間的請求和響應都要通過過濾器進行過濾。舉例:在過濾器中定義了禁止訪問192.10.10.1這個地址,那麼當客戶端發出訪問192.10.10.1的請求時,經過過濾器後,客戶端得到的響應是出現該IP禁止訪問的提示。再舉個例子,我們J2EE項目中的權限管理就是通過過濾器實現的,網站有不用身份的用戶(系統管理員、會員級用戶、瀏覽者臨時用戶),不用身份對系統的功能模塊具有不同的訪問權限,可以將各功能模塊以*.do命名,然後在過濾器中配置過濾*.do,就可以控制不同級別用戶的訪問權限了

3)監聽器,是針對事件而說的,可以說是事件監聽器,J2EE中事件主要有三類:ServletContext事件、會話事件和請求事件。以ServletContext對象的創建事件為例,利用針對ServletContext對象創建事件的監聽器來監聽,一旦監聽到有ServletContext對象的創建事件(比如項目啟動時的初化),就讀取相應的數據庫連接操作來保存供調用。簡單來說監聽器就是監聽一些對象和屬性等的增加、修改和刪除,一旦監聽到相應事件就會觸發某種活動,做出相應處理。

答案均系在圖書館查閱資料後手敲,不知滿意否,呵呵。

java web 過濾器跟攔截器的區別和使用

java web 過濾器跟攔截器的區別和使用分別介紹如下:

1、過濾器的使用

Filter主要對客戶端的請求和服務器的響應進行過濾,使用場景:

客戶端的請求到達服務器,服務器真正開始處理這個請求之前,要經過Filter的過濾

服務器真正的處理完這個請求,生成響應之後,要經過Filter的過濾,才能將響應發送給客戶端

作用:可以通過Filter技術,對web服務器管理的所有web資源,例如JSP、Servlet、靜態圖片文件或靜態 html文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。

配置Filter

同開發Servlet一樣,寫完了類,接下來就是配置了,我們需要在web.xml文件中配置Filter。具體的配置和Servlet配置如出一轍。

filter

   filter-namelog/filter-name

   filter-classcom.jellythink.practise.LogFilter/filter-class

/filter

filter-mapping

   filter-namelog/filter-name

   url-pattern/*/url-pattern

   dispatcherREQUEST/dispatcher

/filter-mapping

上面配置中比較重要的就是url-pattern和dispatcher了。

過濾類:

public class LogFilter implements Filter

{

   private FilterConfig config;

   public void init(FilterConfig config)

   {

       this.config = config;

   }

   public void destroy()

   {

       this.config = null;

   }

   // 這個方法是Filter的核心方法

   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

   throws IOException, ServletException

   {

       // 對用戶的請求進行處理

       ServletContext context = this.config.getServletContext();

       long begin = System.currentTimeMillis();

       // 輸出過濾信息

       System.out.println(“開始過濾…”);

       HttpServletRequest hRequest = (HttpServletRequest)request;

       System.out.println(“Filter已經截獲到用戶請求的地址:” + hRequest.getServletPath());

       // 處理完以後,將請求交給下一個Filter或者Servlet處理

       chain.doFilter(request, response);

       // 對服務器的響應進行處理

       long end = System.currentTimeMillis();

       System.out.println(“過濾結束”);

       System.out.println(“請求被定為到:” + hRequest.getRequestURI() + “; 所花費的時間為:” + (end – begin));

   }

}

2、攔截器的使用:

攔截器的主要作用是攔截用戶的請求並進行相應的處理。比如通過它來進行權限驗證,或者是來判斷用戶是否登陸,或者是像12306 那樣子判斷當前時間是否是購票時間。

1.在SpringMVC的配置文件中加上支持MVC的schema

xmlns:mvc=””

xsi:schemaLocation=”

        “

 下面是聲明示例:

beans xmlns=””

xmlns:xsi=”” xmlns:context=””

xmlns:mvc=””

xsi:schemaLocation=”

   

   

   

   

    “

這樣在SpringMVC的配置文件中就可以使用mvc標籤了,mvc標籤中有一個mvc:interceptors是用於聲明SpringMVC的攔截器的。

java如何實現攔截短訊功能

java里的攔截器是動態攔截Action調用的對象,它提供了一種機制可以使開發者在一個Action執行的前後執行一段代碼,也可以在一個Action

執行前阻止其執行,同時也提供了一種可以提取Action中可重用部分代碼的方式。在AOP中,攔截器用於在某個方法或者字段被訪問之前,進行攔截

然後再之前或者之後加入某些操作。目前,我們需要掌握的主要是Spring的攔截器,Struts2的攔截器不用深究,知道即可。

2,攔截器的原理

大部分時候,攔截器方法都是通過代理的方式來調用的。Struts2的攔截器實現相對簡單。當請求到達Struts2的ServletDispatcher時,Struts2

會查找配置文件,並根據配置實例化相對的攔截器對象,然後串成一個列表(List),最後一個一個的調用列表中的攔截器。Struts2的攔截器是可

插拔的,攔截器是AOP的一個實現。Struts2攔截器棧就是將攔截器按一定的順序連接成一條鏈。在訪問被攔截的方法或者字段時,Struts2攔截器鏈

中的攔截器就會按照之前定義的順序進行調用。

3,自定義攔截器的步驟

第一步:自定義一個實現了Interceptor接口的類,或者繼承抽象類AbstractInterceptor。

第二步:在配置文件中註冊定義的攔截器。

第三步:在需要使用Action中引用上述定義的攔截器,為了方便也可以將攔截器定義為默認的攔截器,這樣在不加特殊說明的情況下,所有的

Action都被這個攔截器攔截。

4,過濾器與攔截器的區別

過濾器可以簡單的理解為「取你所想取」,過濾器關注的是web請求;攔截器可以簡單的理解為「拒你所想拒」,攔截器關注的是方法調用,比如攔截

敏感詞彙。

4.1,攔截器是基於java反射機制來實現的,而過濾器是基於函數回調來實現的。(有人說,攔截器是基於動態代理來實現的)

4.2,攔截器不依賴servlet容器,過濾器依賴於servlet容器。

4.3,攔截器只對Action起作用,過濾器可以對所有請求起作用。

4.4,攔截器可以訪問Action上下文和值棧中的對象,過濾器不能。

4.5,在Action的生命周期中,攔截器可以多次調用,而過濾器只能在容器初始化時調用一次。

5,Spring攔截器

java 攔截器

好像是不行吧!攔截器是攔截客戶端請求和服務端響應的,Action是處理客戶端請求並生成響應的,攔截器是工作在兩者之間的,對客戶端的請求攔截,對服務端的響應攔截。

java有什麼註解前置前攔截

本文將用簡潔的代碼構建一個springboot的攔截器。攔截器的使用很簡單,定義一個自己的攔截器,向配置中添加一下就可以使用。為了方便,之後又引入了註解。

目錄和概述

概述

假設需求:訪問項目的controller是都要進行”token驗證”,除了某些像登錄之類的方法。

項目結構:

TokenInterceptor.java 自定義攔截器

InterceptorConfig.java 添加攔截器進入項目

NoNeedToken.java 自定義註解

TestController.java 測試接口

1、自定義攔截器

在 TokenInterceptor.java 中輸入以下代碼,以下的代碼將生成一個在請求到達controller前進行攔截的攔截器

import com.alibaba.fastjson.JSONObject;

import org.springframework.lang.Nullable;

import org.springframework.stereotype.Component;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.PrintWriter;

import java.util.Arrays;

import java.util.List;

@Component

public class TokenInterceptor implements HandlerInterceptor {undefined

// 假設現在的token有如下數據

List tokenList = Arrays.asList(“111”, “222”, “333”);

// 這個方法是在訪問接口之前執行的,我們只需要在這裡寫驗證登陸狀態的業務邏輯,就可以在用戶調用指定接口之前驗證登陸狀態了

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {undefined

// 設置返回為json格式,使用UTF-8

response.setCharacterEncoding(“UTF-8”);

response.setContentType(“application/json; charset=utf-8”);

String token = request.getHeader(“token”);

PrintWriter out;

// 之後寫你的判斷邏輯:return true是通過攔截器,可以繼續訪問controller,return false是不通過

if (token == null || !tokenList.contains(token)) {undefined

// 如果失敗了返回{state:”false”, msg:”token is null or wrong”}

JSONObject res = new JSONObject();

res.put(“state”,”false”);

res.put(“msg”,”token is null or wrong”);

out = response.getWriter();

out.append(res.toString());

return false;

}

// 否則返回true 進入controller

return true;

}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {undefined

}

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {undefined

}

}

————————————————

版權聲明:本文為CSDN博主「魔王別囂張」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:

java語言中攔截器、過濾器、監聽器都是什麼意思?

過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts2的

action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者

struts2的action前統一設置字符集,或者去除掉一些非法字符

攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法後打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。

攔截器與過濾器的區別 :

攔截器是基於java的反射機制的,而過濾器是基於函數回調。

攔截器不依賴與servlet容器,過濾器依賴與servlet容器。

攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。

攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。

在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

執行順序 :過濾前 – 攔截前 – Action處理 – 攔截後 –

過濾後。個人認為過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登錄用戶不能訪問內部頁面的處理);過濾通過後,攔截器將檢查用戶提交數

據的驗證,做一些前期的數據處理,接着把處理後的數據發給對應的Action;Action處理完成返回後,攔截器還可以做其他過程,再向上返回到過濾器的後續操作。

監聽器:這個東西在c/s模式裏面經常用到,他會對特定的事件產生產生一個處理。監聽在很多模式下用到。比如說觀察者模式,就是一個監聽來的。又比如struts2可以用監聽來啟動。Servlet監聽器用於監聽一些重要事件的發生,監聽器對象可以在事情發生前、發生後可以做一些必要的處理。

好比如果說Servlet的監聽器Listener,它是實現了javax.servlet.ServletContextListener

接口的服務器端程序,它也是隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。主要作用是:

做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/184460.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 17:24
下一篇 2024-11-25 17:24

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Spring Boot 集成 Jacoco

    本文將從以下幾個方面介紹如何在 Spring Boot 中集成 Jacoco:1、Jacoco 概述;2、Spring Boot 集成 Jacoco 的配置;3、生成 Jacoco…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論