溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring Boot配置過(guò)濾器的2種方式示例

發(fā)布時(shí)間:2020-10-01 15:49:06 來(lái)源:腳本之家 閱讀:174 作者:java_lover 欄目:編程語(yǔ)言

前言

過(guò)濾器(Filter)是Servlet中常用的技術(shù),可以實(shí)現(xiàn)用戶在訪問(wèn)某個(gè)目標(biāo)資源之前,對(duì)訪問(wèn)的請(qǐng)求和響應(yīng)進(jìn)行攔截,常用的場(chǎng)景有登錄校驗(yàn)、權(quán)限控制、敏感詞過(guò)濾等,下面介紹下Spring Boot配置過(guò)濾器的兩種方式。

一、@WebFilter注解方式

使用@WebFilter注解為聲明當(dāng)前類為filter,第一個(gè)參數(shù)為該filter起一個(gè)名字,第二個(gè)參數(shù)為說(shuō)明要攔截的請(qǐng)求地址,當(dāng)前類需要實(shí)現(xiàn)Filter接口,里面有三個(gè)方法,分別為過(guò)濾器初始化、過(guò)濾方法和過(guò)濾器銷毀。

@Slf4j
@WebFilter(filterName = "myFilter1", urlPatterns = "/*")
public class MyFilter1 implements Filter {
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 log.info(filterConfig.getFilterName() + " init");
 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
 log.info("myFilter1 begin");
 try {
  log.info("業(yè)務(wù)方法執(zhí)行");
  chain.doFilter(request, response);
 } catch (Exception e) {
  log.error("error!", e);
 }
 log.info("myFilter1 end");
 }

 @Override
 public void destroy() {
 }
}

啟動(dòng)類添加@ServletComponentScan注解,@ServletComponentScan注解所掃描的包路徑必須包含該Filter,代碼如下:

@SpringBootApplication
@ServletComponentScan(basePackages = "com.example.demo.filter")
public class DemoApplication {

 public static void main(String[] args) {
 SpringApplication.run(DemoApplication.class, args);
 }
}

二、@Bean注解方式

新建MyFilter2.java類,不要加注解@WebFilter,代碼如下:

@Slf4j
public class MyFilter2 implements Filter {
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 log.info(filterConfig.getFilterName() + " init");
 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
 log.info("myFilter2 begin");
 try {
  log.info("業(yè)務(wù)方法執(zhí)行");
  chain.doFilter(request, response);
 } catch (Exception e) {
  log.error("error!", e);
 }
 log.info("myFilter2 end");
 }

 @Override
 public void destroy() {
 }
}

新建配置類WebConfig.java,配置bean,代碼如下:

@Configuration
public class WebConfig {

 @Bean
 public FilterRegistrationBean testFilterRegistration() {
 FilterRegistrationBean registration = new FilterRegistrationBean(new MyFilter2());
 registration.addUrlPatterns("/test"); //
 registration.setName("myFilter2");
 return registration;
 }
}

三、查看運(yùn)行效果

項(xiàng)目啟動(dòng)后瀏覽器訪問(wèn)http://localhost:8080/test,可以看到過(guò)濾器已生效,后臺(tái)打印日志如下:

[nio-8080-exec-1] com.example.demo.filter.MyFilter1        : myFilter1 begin
[nio-8080-exec-1] com.example.demo.filter.MyFilter1        : 業(yè)務(wù)方法執(zhí)行
[nio-8080-exec-1] com.example.demo.filter.MyFilter1        : myFilter1 end

到此Spring Boot配置過(guò)濾器的兩種方式已經(jīng)全部實(shí)現(xiàn),有問(wèn)題歡迎留言溝通哦!

完整源碼地址: https://github.com/suisui2019/springboot-study

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI