日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

解決springboot中配置過濾器以及可能出現(xiàn)的問題

瀏覽:127日期:2023-04-25 13:05:57

在springboot添加過濾器有兩種方式:

1、通過創(chuàng)建FilterRegistrationBean的方式(建議使用此種方式,統(tǒng)一管理,且通過注解的方式若不是本地調(diào)試,如果在filter中需要增加cookie可能會(huì)存在寫不進(jìn)前端情況)

2、通過注解@WebFilter的方式

通過創(chuàng)建FilterRegistrationBean的方式創(chuàng)建多個(gè)filter以及設(shè)置執(zhí)行順序:

1、創(chuàng)建兩個(gè)實(shí)現(xiàn)Filter接口的類TestFilter1 、TestFilter2

package com.aoxun.core.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class TestFilter1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void destroy() {}}

package com.aoxun.core.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class TestFilter2 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void destroy() {}}

2、創(chuàng)建配置類

有多個(gè)filter就創(chuàng)建多個(gè)FilterRegistrationBean ,若需注明filter的執(zhí)行順序,可通過registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1)配置,值越大,執(zhí)行順序越靠后

package com.aoxun.config.web;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.aoxun.core.filter.TestFilter1;import com.aoxun.core.filter.TestFilter2;/** * filter配置 * @author zcj * */@Configurationpublic class FilterConfig2 { @Bean public FilterRegistrationBean companyUrlFilterRegister() { FilterRegistrationBean registration = new FilterRegistrationBean(); //注入過濾器 registration.setFilter(new TestFilter1()); //攔截規(guī)則 registration.addUrlPatterns('/*'); //過濾器名稱 registration.setName('testFilter1'); //過濾器順序 registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); return registration; } @Bean public FilterRegistrationBean outLinkSecurityFilterRegister() { FilterRegistrationBean registration = new FilterRegistrationBean(); //注入過濾器 registration.setFilter(new TestFilter2()); //攔截規(guī)則 registration.addUrlPatterns('/*'); //過濾器名稱 registration.setName('testFilter2'); //過濾器順序 registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1); return registration; } }

通過注解@WebFilter的方式

1、在啟動(dòng)類上增加@ServletComponentScan注解,自動(dòng)掃描帶有過濾器注解的包

2、在類上使用@WebFilter

package com.aoxun.core.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.core.annotation.Order;@WebFilter(filterName='testFilter1',urlPatterns= {'/*'})public class TestFilter1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub }}

注:經(jīng)測試,@Order并不能實(shí)現(xiàn)過濾器排序功能,在springboot中注解的方式增加過濾器可通過修改過濾器文件名稱的方式排序,如上的過濾器TestFilter1在TestFilter2前。

補(bǔ)充知識(shí):SpringBoot2.1.x,集成Filter過濾器的三種方式,包含OncePerRequestFilter方式

一)Filter過濾器簡介

主要作用:Filter使用戶可以改變一個(gè)request和修改一個(gè)response,它能夠在一個(gè)request到達(dá)servlet之前預(yù)處理request,也可以在response離開servlet時(shí)處理response。例如收集數(shù)據(jù)和包裝數(shù)據(jù),并進(jìn)行處理。

1、Filter是依賴Servlet容器的,如Tomcat。

2、Filter對(duì)所有的請(qǐng)求起作用,并是在sevlet之前處理。可以理解成過濾器中包含攔截器,當(dāng)一個(gè)請(qǐng)求過來,先進(jìn)行過濾器處理,再看程序是否受理該請(qǐng)求。過濾器執(zhí)行完后,程序中的攔截器再進(jìn)行處理。

3、Filter只能處理HttpServletRequest和HttpServletResponse,底層是基于回調(diào)函數(shù)。

二)SpringBoot集成Filter過濾器

第一步:先創(chuàng)建一個(gè)maven項(xiàng)目,引入springboot的jar

<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'> <modelVersion>4.0.0</modelVersion> <groupId>com.oysept</groupId> <artifactId>springboot_filter</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.oysept.FilterApplication</mainClass> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> </plugin> </plugins> </build></project>

添加一個(gè)application.yml配置文件,指定一個(gè)端口

server:

port: 8080

創(chuàng)建一個(gè)Demo測試接口

package com.oysept.controller; import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController; /** * Demo Controller * @author ouyangjun */@RestControllerpublic class DemoController { // 帶參GET請(qǐng)求: http://localhost:8080/demo/get/param?param=111222333444 @RequestMapping(value = '/demo/get/param', method = RequestMethod.GET) public String getParam(@RequestParam(value = 'param') String param) { System.out.println('=====>進(jìn)入DemoController /demo/get/param'); return '/demo/get/param,' + param; }}

第二步:使用@WebFilter注解方式,實(shí)現(xiàn)Filter過濾器

當(dāng)使用@WebFilter、@WebServlet、@WebListener等注解時(shí), 需要在springboot啟動(dòng)類中啟用@ServletComponentScan注解指定掃描包。

package com.oysept.filter; import java.io.IOException;import java.util.Enumeration; import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.springframework.core.env.Environment;import org.springframework.web.filter.OncePerRequestFilter; /** * 過濾器, 過濾所有地址 * 方式一: 使用@WebFilter、@WebServlet、@WebListener等注解時(shí), 需要在springboot啟動(dòng)類中啟用@ServletComponentScan注解指定掃描包 * 方式二: 結(jié)合@WebFilter和@Component注解一起使用, 但可能會(huì)同時(shí)注入兩個(gè)bean, 可能會(huì)報(bào)錯(cuò), 可在application.yml配置中啟用同名Bean覆蓋: spring.main.allow-bean-definition-overriding=true * @author ouyangjun */@WebFilter(value = '/*', filterName = 'oauthFilter')public class OAuthFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { System.out.println('====>進(jìn)入OAuthFilter doFilterInternal過濾器===='); System.out.println('請(qǐng)求地址: ' + request.getRequestURL()); System.out.println('GET請(qǐng)求參數(shù): '); Enumeration<String> parameters = request.getParameterNames(); String parameterName = ''; while (parameters.hasMoreElements()) { parameterName = parameters.nextElement(); System.out.println('參數(shù)名稱: ' + parameterName + ', 值: ' + request.getParameter(parameterName)); } // 工具類 //FilterConfig filterConfig = super.getFilterConfig(); //ServletContext servletContext = super.getServletContext(); //Environment environment = super.getEnvironment(); System.out.println('====>結(jié)束OAuthFilter doFilterInternal過濾器===='); filterChain.doFilter(request, response); }}

第三步:使用@Component注解方式,實(shí)現(xiàn)Filter過濾器

package com.oysept.filter; import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; /** * 過濾器通過@Component注解注冊(cè) * @author ouyangjun */@Componentpublic class PathFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 轉(zhuǎn)換 HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; System.out.println('====>進(jìn)入PathFilter doFilter過濾器===='); System.out.println('====>結(jié)束PathFilter doFilter過濾器===='); filterChain.doFilter(request, response); }}

第四步:通過@Bean注解方式,實(shí)現(xiàn)Filter過濾器

@Configuration注解:相當(dāng)于spring中的<beans>標(biāo)簽

@Bean注解:相當(dāng)于spring中<bean>標(biāo)簽

package com.oysept.config; import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration; /** * @Configuration注解: 相當(dāng)于spring中的<beans>標(biāo)簽 * @Bean注解: 相當(dāng)于spring中<bean>標(biāo)簽 * @author ouyangjun */@Configurationpublic class MyFilterConfig { @Bean public FilterRegistrationBean<MyFilter> testFilterRegistration() { FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new MyFilter()); registration.addUrlPatterns('/*'); // 配置過濾路徑 registration.addInitParameter('paramName', 'paramValue'); // 添加初始值 registration.setName('myFilter'); // 設(shè)置filter名稱 registration.setOrder(1); // 請(qǐng)求中過濾器執(zhí)行的先后順序,值越小越先執(zhí)行 return registration; } // 實(shí)現(xiàn)一個(gè)過濾器 public class MyFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 轉(zhuǎn)換 HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; System.out.println('====>進(jìn)入MyFilter doFilter過濾器===='); System.out.println('====>結(jié)束MyFilter doFilter過濾器===='); filterChain.doFilter(request, response); } }}

第五步:創(chuàng)建一個(gè)SpringBoot啟動(dòng)類,并通過@ServletComponentScan注解指定掃描的Filter實(shí)現(xiàn)類

package com.oysept; import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.ServletComponentScan; /** * @ServletComponentScan注解不指定掃描包時(shí), 默認(rèn)掃描當(dāng)前包和子包 * @author ouyangjun */@SpringBootApplication@ServletComponentScan(basePackages = 'com.oysept.filter')public class FilterApplication { public static void main(String[] args) { new SpringApplicationBuilder(FilterApplication.class).run(args); }}

啟動(dòng)main方法,在瀏覽器輸入地址:http://localhost:8080/demo/get/param?param=111222333444

在控制臺(tái)查看打印日志:

解決springboot中配置過濾器以及可能出現(xiàn)的問題

項(xiàng)目結(jié)構(gòu)圖:

解決springboot中配置過濾器以及可能出現(xiàn)的問題

以上這篇解決springboot中配置過濾器以及可能出現(xiàn)的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久亚洲不卡| 亚洲日本欧美| 国产高清日韩| 91亚洲无吗| 国产美女视频一区二区| 日韩精品一区二区三区免费视频| 蜜臀精品久久久久久蜜臀 | 午夜久久黄色| 综合色一区二区| 美女国产一区二区三区| 欧洲在线一区| 亚洲欧美久久| 精品国产午夜肉伦伦影院| 亚洲精品成人| 国产精品久久亚洲不卡| 久久精品国产68国产精品亚洲| 国产一区导航| 久久激情五月婷婷| 日韩精品欧美激情一区二区| 免费在线观看一区二区三区| 久久中文字幕一区二区三区| 日韩视频一区二区三区在线播放免费观看| 国产剧情在线观看一区| 欧美日一区二区| 精品国产乱码久久久| 久久中文视频| 久久精品毛片| 日韩高清一区二区| 欧美日韩国产综合网| 国产美女撒尿一区二区| 日韩专区一卡二卡| 99久久夜色精品国产亚洲1000部| 国产欧美久久一区二区三区| 国产一区二区高清| 国产高清一区| 久久精品卡一| а√天堂8资源在线| 国产欧美另类| 91成人小视频| 日本欧美在线| 亚洲麻豆一区| 日韩在线观看一区二区| 免费精品国产的网站免费观看| www.com.cn成人| 精品中文在线| 日韩综合一区| 日韩欧美字幕| 国产一区二区三区久久久久久久久| 国产精品一区免费在线| 日韩二区三区四区| 91九色综合| 日韩毛片一区| 综合视频一区| 97久久中文字幕| 奇米亚洲欧美| 久久精品色播| 日韩免费高清| 久久国产亚洲| 婷婷精品进入| 免费成人av在线播放| 三级久久三级久久久| 亚洲综合色婷婷在线观看| 欧美日韩国产探花| 亚洲狼人精品一区二区三区| 日韩精品视频网站| 国产精品s色| 国产成人精品999在线观看| 国产一区二区三区四区| 久久精品青草| 首页欧美精品中文字幕| 中文字幕av一区二区三区人| 国产伦乱精品| 日韩不卡免费高清视频| 国产精品毛片一区二区三区| 日本v片在线高清不卡在线观看| 国产精品地址| 免费av一区| 亚洲永久精品唐人导航网址| 久久av综合| 国产日韩综合| 国产一区二区三区日韩精品| 国产亚洲在线| 精品国产乱码久久久| 蜜桃视频在线观看一区| 久久一区亚洲| 蜜臀久久99精品久久久久宅男| 久久久久伊人| 蜜桃久久久久久久| 91日韩在线| 日本成人在线不卡视频| 视频福利一区| 国产精品v日韩精品v欧美精品网站 | 国产成人精选| 蜜臀久久99精品久久久久宅男| 麻豆中文一区二区| 亚洲影视一区二区三区| 福利一区和二区| 国产福利一区二区三区在线播放| 欧美精选一区二区三区| 精品五月天堂| 伊人久久婷婷| 97精品一区二区| 国内精品伊人| 欧美成人一二区| 日韩毛片网站| 亚洲最大av| 日韩午夜av| 日韩亚洲在线| 欧美日韩国产一区精品一区| 黑人精品一区| 久久久久亚洲精品中文字幕| 欧美日韩a区| 中文字幕一区二区三区四区久久| 国产精品女主播一区二区三区| 久久国产电影| 日韩一区三区| 夜鲁夜鲁夜鲁视频在线播放| av在线最新| 欧美一区二区三区高清视频| 亲子伦视频一区二区三区| 国产精品专区免费| 国产在线看片免费视频在线观看| 精品国产亚洲一区二区在线观看| 国产精品入口久久| 精品久久久中文字幕| 久久不见久久见免费视频7| 久久精品国产久精国产| av资源新版天堂在线| 日韩在线高清| 伊人精品视频| 免费精品视频| 国产亚洲精品美女久久| 久久亚洲国产精品尤物| 欧美日韩一区二区综合| 日韩在线观看一区二区| 日本99精品| 日韩免费av| 综合国产精品| 欧美黄色精品| 久久三级福利| 日韩精品a在线观看91| 精品视频自拍| 女同性一区二区三区人了人一 | 日韩欧美久久| 精品伊人久久| 欧美 日韩 国产一区二区在线视频| 日韩视频一区| 国产精品啊v在线| 欧美 日韩 国产精品免费观看| 亚洲网址在线观看| 国产成人免费| 日韩欧美另类中文字幕| 日本少妇一区| 国产伦理一区| 玖玖玖国产精品| 91欧美日韩| 日韩精品免费观看视频| 捆绑调教美女网站视频一区| 欧美专区18| 在线亚洲人成| 久久精品超碰| 久久午夜影视| 久久久夜精品| 精品伊人久久久| 欧美日韩一区二区国产| 夜夜精品视频| av资源中文在线天堂| 青草综合视频| 天堂俺去俺来也www久久婷婷| 日韩精品诱惑一区?区三区| 久久爱www成人| 日韩高清成人在线| 99久久精品国产亚洲精品| 在线观看亚洲精品福利片| 97se综合| 97精品一区| 国产一区二区三区四区| 国产欧美欧美| 国产精品一区二区三区www| 日日夜夜免费精品视频| 亚洲欧美日韩精品一区二区| 久久久久欧美精品| 成人看片网站| 日韩av免费大片| 久久97视频| 美女性感视频久久| 国产欧美亚洲一区| 日韩精品视频中文字幕| 亚洲开心激情| 日韩高清电影一区| 国产欧美日韩一区二区三区在线| 日韩精品视频在线看| 欧美精品国产一区| 国产高清精品二区| 国产精品麻豆久久| 999久久久精品国产| 亚洲一区免费| 日韩专区视频网站| 国产日韩精品视频一区二区三区| 欧美日韩中文|