最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年09月15日 10:50:32   作者:志在遠(yuǎn)方  
這篇文章主要介紹了解決springboot中配置過濾器以及可能出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

2、通過注解@WebFilter的方式

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

1、創(chuàng)建兩個實現(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)建配置類

有多個filter就創(chuàng)建多個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
 *
 */
@Configuration
public 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、在啟動類上增加@ServletComponentScan注解,自動掃描帶有過濾器注解的包

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并不能實現(xiàn)過濾器排序功能,在springboot中注解的方式增加過濾器可通過修改過濾器文件名稱的方式排序,如上的過濾器TestFilter1在TestFilter2前。

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

一)Filter過濾器簡介

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

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

2、Filter對所有的請求起作用,并是在sevlet之前處理??梢岳斫獬蛇^濾器中包含攔截器,當(dāng)一個請求過來,先進(jìn)行過濾器處理,再看程序是否受理該請求。過濾器執(zhí)行完后,程序中的攔截器再進(jìn)行處理。

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

二)SpringBoot集成Filter過濾器

第一步:先創(chuàng)建一個maven項目,引入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>

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

server:

port: 8080

創(chuàng)建一個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
 */
@RestController
public class DemoController {
 
 // 帶參GET請求: 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注解方式,實現(xiàn)Filter過濾器

當(dāng)使用@WebFilter、@WebServlet、@WebListener等注解時, 需要在springboot啟動類中啟用@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等注解時, 需要在springboot啟動類中啟用@ServletComponentScan注解指定掃描包
 * 方式二: 結(jié)合@WebFilter和@Component注解一起使用, 但可能會同時注入兩個bean, 可能會報錯, 可在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("請求地址: " + request.getRequestURL());
 
  System.out.println("GET請求參數(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注解方式,實現(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注解注冊
 * @author ouyangjun
 */
@Component
public 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注解方式,實現(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
 */
@Configuration
public 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); // 請求中過濾器執(zhí)行的先后順序,值越小越先執(zhí)行
  return registration;
 }
 
 // 實現(xiàn)一個過濾器
 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)建一個SpringBoot啟動類,并通過@ServletComponentScan注解指定掃描的Filter實現(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注解不指定掃描包時, 默認(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);
 }
}

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

在控制臺查看打印日志:

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

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

相關(guān)文章

  • Spring boot 路徑映射的實現(xiàn)

    Spring boot 路徑映射的實現(xiàn)

    這篇文章主要介紹了spring boot 路徑映射的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Spring MVC 請求處理流程步驟詳解

    Spring MVC 請求處理流程步驟詳解

    這篇文章主要介紹了Spring MVC 請求處理流程詳解,本文分步驟結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • Spring Boot集成Swagger2項目實戰(zhàn)

    Spring Boot集成Swagger2項目實戰(zhàn)

    在日常的工作中,我們往往需要給前端(WEB端、IOS、Android)或者第三方提供接口,這個時候我們就需要給他們提供一份詳細(xì)的API說明文檔。這篇文章我們就來分享一種API文檔維護(hù)的方式,即通過Swagger來自動生成Restuful API文檔
    2018-01-01
  • 強烈推薦MyBatis?三種批量插入方式的比較

    強烈推薦MyBatis?三種批量插入方式的比較

    這篇文章主要介紹了強烈推薦MyBatis?三種批量插入方式的比較,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • java8 實現(xiàn)map以value值排序操作

    java8 實現(xiàn)map以value值排序操作

    這篇文章主要介紹了java8 實現(xiàn)map以value值排序操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java基礎(chǔ)泛型詳情

    Java基礎(chǔ)泛型詳情

    這篇文章主要介紹了Java基礎(chǔ)泛型詳情,泛型是JDK5中引入的特性,它提供了編譯時類型安全檢測機制,該機制允許在編譯時檢測到非法的類型,下面文章的詳細(xì)介紹,需要的朋友可以參考一下
    2022-04-04
  • javaWeb中使用Redis緩存實例解析

    javaWeb中使用Redis緩存實例解析

    這篇文章主要介紹了javaWeb中使用Redis緩存實例解析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 使用EasyPoi完成復(fù)雜一對多excel表格導(dǎo)出功能全過程

    使用EasyPoi完成復(fù)雜一對多excel表格導(dǎo)出功能全過程

    這篇文章主要介紹了使用EasyPoi完成復(fù)雜一對多excel表格導(dǎo)出功能全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 服務(wù)器實現(xiàn)Java遠(yuǎn)程訪問Linux服務(wù)器方式(JSch)

    服務(wù)器實現(xiàn)Java遠(yuǎn)程訪問Linux服務(wù)器方式(JSch)

    文章介紹了如何使用Java遠(yuǎn)程訪問Linux服務(wù)器,主要包括建立SSH連接、使用JSch庫執(zhí)行命令、解析返回值以及關(guān)閉連接的步驟
    2024-11-11
  • Java?SpringBoot操作Redis

    Java?SpringBoot操作Redis

    這篇文章主要介紹了SpringBoot如何操作Redis,文章中有詳細(xì)的代碼示例,有一定的參考價值,感興趣的同學(xué)可以參考閱讀
    2023-04-04

最新評論

江达县| 教育| 宁武县| 公主岭市| 卫辉市| 阿拉善右旗| 巴林左旗| 伊宁市| 武冈市| 四川省| 台州市| 靖州| 于田县| 共和县| 于都县| 金寨县| 浙江省| 富顺县| 永安市| 老河口市| 神木县| 微博| 石景山区| 奉化市| 房产| 色达县| 合水县| 八宿县| 洛阳市| 绥宁县| 临泽县| 黔西县| 巴塘县| 井陉县| 松江区| 垦利县| 林甸县| 宽甸| 简阳市| 永康市| 任丘市|