導航:首頁 > 凈水問答 > spring配置指定過濾器

spring配置指定過濾器

發布時間:2022-12-13 09:00:43

Ⅰ SpringBoot系列:4.session和鑒權—過濾器和攔截器

本文主要介紹下,SpringBoot的web項目中,

使用redis保存並共享session,可以實現集群內的登錄信息共享。SpringBoot項目中,通過在 application.yml 增加redis的配置,即可實現對session的存儲和修改。

那麼session是在何時被處理的?session的key又是如何生成的呢?這里實際使用了web項目中的過濾器。

在SpringBoot的web項目中,啟動的tomcat在處理http請求時,有一個很重要的類: ApplicationFilterChain 。每個http請求在處理時都會通過這個類。這個類負責按順序處理全部已注冊的 Filter ,也就是過濾器。通過實現tomcat中的 Filter 介面,就可以定義一個過濾器。

在SpringBoot中的web項目中,有幾個默認的過濾器,其中一個就是用來處理session的: SessionRepositoryFilter

SessionRepositoryFilter 主要的成員是兩個介面,都有多個可選的實現類,通過這兩個成員就實現了對session的解析。

當然也可以實現一個自己的過濾器,主要有兩種方式:

下面我們使用第一種方式實現一個限制指定IP的過濾器:

通過過濾器解析session後,就可以根據session中保存的內容,判斷當前登錄的用戶許可權。

這里是通過一個攔截器實現的,在攔截器中可以直接通過 HttpServletRequest.getSession() 方法直接獲取session的信息。

一個簡單的攔截器實現如下:

定義之後要注冊到處理流程中:

先來看下過濾器和攔截器的執行順序,通過debug得到的執行順序如下圖:

在大部分場景中,過濾器和攔截器都是可互換的,使用哪個都可以。

過濾器和攔截器也有些區別,這里不談實現和規范的差異,就說下使用中可能涉及的區別:

最後對於過濾器和攔截器的應用場景,說下個人的總結。基於執行順序,方法參數和SpringBoot中的一些實現類來看。

以上內容屬個人學習總結,如有不當之處,歡迎在評論中指正

Ⅱ Spring Boot-Filter過濾器使用

1、基礎准備

2、編寫Filter

此處我們重點關注 doFilter方法 ,編寫實現類重寫該方法。

Ⅰ 在自定義Filter實現類上使用@WebFilter註解;

Ⅱ 自定義filterName(隨意,不要與其他Filter重復即可);

Ⅲ 定義urlPatterns此處設置為"/*",表示攔截所有請求;

Ⅰ 將傳入的 request 與 response 對象轉換為 Http類型 ;

Ⅱ 自定義不需要處理的URI數組

Ⅲ 獲取請求URI

Ⅳ 判斷本次請求

封裝checkURI方法,如下:

a、注入PATH_MATCHER,用於路徑比較,如下:

b、方法體,如下:

Ⅴ 不需要攔截,則直接放行

Ⅵ 其餘路徑,判斷登錄狀態

a、已登錄,則放行

BaseContext是自定義存儲線程userId的類

b、未登錄,攔截

自定義常量

攔截,此處使用response向前端返回響應數據R.error(NOT_LOGIN)

3、掃描Filter

在啟動類上添加 @ServletComponentScan註解 ,用於掃描 @WebFilter 註解 ,如下:

4、測試

編寫Controller類,啟動測試。

以上即為Filter基礎使用的內容,感謝閱讀。

Ⅲ Spring Security自定義攔截器

HttpSecurity實際上就是在配置Spring security的過濾器鏈,比如:CSRF,CORS,表單登錄等,每個配置器對應一個過濾器,可以通過HttpSecurity配置過濾器的行為。

甚至可以像CRSF一樣直接關閉過濾器,例如:SessionManagement

Spring Security通過SessionManagermentConfigurer來配置SessionManagerment的行為,與SessionManagermentConfigurer類似的配置器還有CorsConfigurer,RememberMeConfigurer等,他們都實現了SecurityConfigurer的標准介面。

SessionManagementConfigurer是在configure方法中將最終的SessionManagementFilter插入過濾器鏈來實現會話管理的。

除了Spring security提供的過濾器外,我們還可以添加自己的過濾器以實現更多的功能,這些都是可以在HttpSecurity中實現

雖然Spring Security 的過濾器鏈對過濾器沒有特殊要求,只要繼承了Filter即可,但是在Spring體系中,推薦使用OnePerRequestFilter來實現,它可以確保一次請求只會通過一次該過濾器(Filter實際並不能保證這一點)

其實關於這個自定義Filter,我個人感覺有個比較danteng的地方,比如:我們在實現圖片驗證碼或者一些其他的登錄相關的驗證碼的時候,我們可能會做到在賬號跟密碼驗證了之後對這個驗證碼進行驗證,然後我就必須有個這種操作: http.addFilterBefore(filter,.class); 因為如果驗證碼驗證錯誤,我們就不需要也沒必要再往後驗證了,所以我們得知道我們定義的這個驗證碼過濾器得在什麼時候驗證在哪個過濾器之前或者之後驗證,那麼問題來了,或許我們並不知道Spring Security給我們提供了哪些或者什麼樣的過濾器,我們得去記住這些過濾器,這就有點不友好了。在HttpSecurityBuilder介面中,有一段這樣的注釋:

非常爽眼~

Ⅳ SpringBoot 手寫過濾器&載入第三方過濾器

他們三個各有優缺點,需要根據自己的業務需求來選擇最適合的攔截機制。

好了下面開始正文。

好了,開始正文。

特別容易,繼承Filter ,然後根據需求重寫它的三個方法。

其中 init方法是初始化方法,最先執行。
然後執行doFilter方法,熟悉servlet的應該都知道,它其實就是調用業務。
最後destroy方法,是最後執行的。

然後我們啟動服務,隨便調用一個controller,控制台列印如下:

一般在開發的時候,我們可能用到第三方的過濾器,我們不可能在其源碼上添加 @Component 註解。所以我們必須寫一個配置類來引入它。

下面我們把上面的例子當作第三方過濾器,把TimeFilter類上面的@Component註解去掉。做一個模擬練習。

注意一定要去掉TimeFilter類上面的@Component註解,否則過濾器會失效。

SpringCloud
springboot
nginx
redis

Java NIO教程
Java reflection 反射詳解
Java並發學習筆錄
Java Servlet教程
jdbc組件詳解
Java NIO教程
Java語言/版本 研究

Ⅳ spring boot 配置過濾器怎麼打開

Boot、Spring Web和來Spring MVC等其他框架,都提供了很多源servlet 過濾器可使用,我們需要在配置文件中定義這些過濾器為bean對象。現在假設我們的應用程序運行在一台負載均衡代理伺服器後方,因此需要將代理伺服器發來的請求包含的IP地址轉換成真正的用戶IP。Tomcat 8 提供了對應的過濾器:RemoteIpFilter。通過將RemoteFilter這個過濾器加入過濾器調用鏈即可使用它。

Ⅵ SpringBoot2.x將Filter過濾器添加到容器

JAVA && Spring && SpringBoot2.x — 學習目錄

SpringBoot 關於Filter、Servlet、Listener配置—官網

在使用嵌入式容器中(內置Tomcat),類上含有 @WebServlet 、 @WebFilter 和 @WebListener 註解時,可以通過啟動類上的 @ServletComponentScan 註解進行掃描。

需要注意的是:@ServletComponentScan 在獨立容器中沒有任何效果,而是使用容器的內置發現機制。

任何的 Servlet 、 Filter 或者 Listener 實例都是在容器中注冊的,可以使用 @Component 或者 @Bean
默認情況下,如果上下文只包含一個Servlet,則將其映射為 / ,在多個Servlet bean的情況下,bean名稱用作路徑前綴,過濾器映射到 /* 。

自定義Filter通過@Bean註解後,被SpringBoot自動注冊到容器的Filter chain中,並且攔截路徑為 /* ,這樣導致的結果是:所有的URL都會被自定義的Filter過濾。

可以使用 ServletRegistrationBean 、 FilterRegistrationBean 以及 類進行完全的控制。

Spring Boot對Filter、Servlet提供了相應的注冊類,來進行精細化的配置,我們可以使用注冊類來取消Filter的自動注冊。

Ⅶ Springboot 過濾器

它是基於Servlet 技術實現的, 簡單的來說,過濾器就是起到過濾的作用,在web項目開發中幫我們過濾一些指定的 url做一些特殊的處理。

過濾掉一些不需要的東西,例如一些錯誤的請求。
也可以修改請求和相應的內容。
也可以拿來過濾未登錄用戶。

過濾器(filter)有三個方法,其中初始化(init)和摧毀(destroy)方法一般不會用到,主要用到的是doFilter這個方法。

如果過濾通過,則在doFilter執行 filterChain.doFilter(request,response);

自定義Filter有兩種實現方式,第一種是使用@WebFilter,第二種是使用 FilterRegistrationBean

@WebFilter 用於將一個類聲明為過濾器,該註解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為過濾器。

Ⅷ spring中配置過濾器的一個疑問。

嗯 ...樓主說的很明白,業務類(ServiceIMP)及注入,調用 都沒有問題

既然項目中加入了filter 那麼就是通過spring在filter注入bean

將filter注入Spring 而不是單純的把業務類注入生成getter setter,讓filter調用就可以了。在spring中,filter被納入了bean 管理機制。

如Spring注入過濾器配置

<bean id="myFilter" class="com.MyFilter"> //指名具體的filter類
<property name="service"> //需要注入的具體參數
<ref bean="service"/>
</property>
</bean>

這樣吧 這有個簡單實例,給你參考一下:
http://www.iwangyu.com/index.php/archives/309

如果只憑配置信息看不明白,還有個簡單的例子你看一下:
http://hi..com/anglee2010/blog/item/bc51ab3f11ffc13371cf6c28.html

應該差不多了...

工作日可以隨時 Hi 我

Ⅸ spring中怎麼實現過濾器和監聽器

1、延遲載入過濾器

Hibernate 允許對關聯對象、屬性進行延遲載入,但是必須保證延遲載入的操作限於同一個 Hibernate Session 范圍之內進行。如果 Service 層返回一個啟用了延遲載入功能的領域對象給 Web 層,當 Web 層訪問到那些需要延遲載入的數據時,由於載入領域對象的 Hibernate Session 已經關閉,這些導致延遲載入數據的訪問異常。

Spring 為此專門提供了一個 OpenSessionInViewFilter 過濾器,它的主要功能是使每個請求過程綁定一個 Hibernate Session,即使最初的事務已經完成了,也可以在 Web 層進行延遲載入的操作。

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>

2、亂碼過濾器

對post亂碼的處理,如下

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter①Spring編輯過濾器
</filter-class>
<init-param>②編碼方式
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>③強制進行編碼轉換
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>②過濾器的匹配URL
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>

3、請求跟蹤日誌過濾器

程度調試者可以詳細地查看到有哪些請求被調用,請求的參數是什麼,請求是否正確返回等信息,需要將log4j設為debug

org.springframework.web.filter.: 該過濾器將請求的 URI 記錄到 Common 日誌中


4、WebAppRootListener

可以將 Web 應用根目錄添加到系統參數中,對應的屬性名可以通過名為「webAppRootKey」的 Servlet 上下文參數指定,默認為「webapp.root」,配置如下

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>baobaotao.root</param-value>①Web應用根目錄以該屬性名添加到系統參數中
</context-param>

②負責將Web應用根目錄以webAppRootKey上下文參數指定的屬性名添加到系統參數中
<listener>
<listener-class>
org.springframework.web.util.WebAppRootListener
</listener-class>
</listener>

5、Log4jConfigListener監聽器

包括了 WebAppRootListener 的功能,也就是說,Log4jConfigListener 會自動完成將 Web 應用根目錄以 webAppRootKey 上下文參數指定的屬性名添加到系統參數中,在log4j.xml可以直接使用


6、Introspector 緩存清除監聽器

負責處理由 JavaBean Introspector 功能而引起的緩存泄露。IntrospectorCleanupListener 監聽器在 Web 應用關閉的時會負責清除 JavaBean Introspector 的緩存,在 web.xml 中注冊這個監聽器可以保證在 Web 應用關閉的時候釋放與其相關的 ClassLoader 的緩存和類引用。

Ⅹ spring security 核心 --過濾器

Table 2. 標准過濾器別名和順序

你可以添加自己的過濾器到列表中,使用custom-filter過濾元件和這些名字來指定你的過濾器應該出現在的位置之一:

<http>
<custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" />
</http>

<beans:bean id="myFilter" class="com.mycompany.MySpecialAuthenticationFilter"/>
你也可以使用after和before屬性來讓你的過濾器插入到列表中的其他過濾器的前面和後面。FIRST和LAST可以用在position屬性來設置你希望將你的過濾器插入到整個列表的前面或者後面。

閱讀全文

與spring配置指定過濾器相關的資料

熱點內容
印染廢水中cod排放量是多少 瀏覽:245
冷干機的濾芯如何拆下來 瀏覽:552
海爾凈水器出水管介面怎麼拆 瀏覽:13
河北水垢漏斗 瀏覽:689
白雲區農村ppp污水項目 瀏覽:498
安吉爾水壺濾芯怎麼拆 瀏覽:318
電廠化學廢水調整及注意事項 瀏覽:892
什麼叫納米微晶技術凈化器 瀏覽:43
百佳境界凈水器如何 瀏覽:695
甲醇蒸餾塔再沸器的原理 瀏覽:268
ro膜氯化 瀏覽:984
潔廁靈能除垢 瀏覽:459
油煙機凈化器的價格多少錢一台 瀏覽:334
凈化器電源怎麼測量 瀏覽:332
wq污水提升泵 瀏覽:415
污水處理50戶需多少立方池 瀏覽:656
樹脂是不是ab膠 瀏覽:694
減壓蒸餾怎麼拆 瀏覽:544
飲水機為什麼加熱一會就保溫 瀏覽:287
電解法處理污水基於什麼原理 瀏覽:229