springboot整合filter
生活随笔
收集整理的這篇文章主要介紹了
springboot整合filter
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何在SpringBoot當中去整合Filter,SpringBoot在整合Filter時,其實和整合Servlet差不多,提供了兩種方案,一種還是通過注解掃描,完成Filter的注冊,第二種方式呢,通過方法完成Filter組件的注冊,我們先來看第一種,通過注解掃描完成Filter的注冊,首先我們要創建SpringBoot的項目,我們先去編寫一個Filter,需要實現一個Filter接口,以往我們編寫Filter的時候,如何對他做配置,首先這個需要有一個Filter節點,然后在filter節點當中,有一個filter-name,還有一個filter-class,然后還有一個filter-mapping,然后在filter-mapping當中,也需要一個filter-name,還有url-pattern,比如我們讓他去攔截一個servlet,這是我們原來通過web.xml,給Filter做的一些配置,現在我們不需要對web.xml做什么配置,同樣還是一個Annotation,這個叫@WebFilter,在這里同樣有一個filterName,然后還有一個urlPatterns,那么filterName對應的就是我們的FirstFilter,urlPatterns這一塊,我們以往在做Filter開發的時候,可能Filter要做多個請求,那我們怎么辦呢,我們也知道urlpatterns這一塊,其實他是一個數組類型,既然是數組類型,我要讓他攔截*.do,或者是*.jsp,這是可以的,現在我們只讓他攔截servlet的url,我們就不用配這么多了,這樣我們的Servlet就編寫完畢了,然后我們在doFilter里面加點內容@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {System.out.println("進入Filter");arg2.doFilter(arg0, arg1);System.out.println("離開Filter");
}這樣我們就把Filter編寫好了,這個Servlet我們已經有了,然后我們寫一個啟動類,其實這個啟動類呢,和我們Servlet的啟動類是一樣的@SpringBootApplication
@ServletComponentScan
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}在這里要添加一個@SpringBootApplication,然后再加一個@ServletComponentScan,用的還是@ServletComponentScan,這樣我們的啟動類就寫好了,下面我們運行一下,看一下filter是否可以工作,啟動沒有問題,接下來我們來訪問/firstlocalhost:8080/first這個時候filter已經執行了,然后firstServlet也執行了,filter離開的時候也執行了,filter的攔截是生效的,以上就是通過注解掃描的方式來實現,接下來我們再來看第二種方式,通過方法來完成Filter組件的注冊,在這里也是不需要添加Annotation的,因為它是需要方法來注冊的,@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {System.out.println("進入SecondFilter");arg2.doFilter(arg0, arg1);System.out.println("離開SecondFilter");
}這樣我們的Filter就寫完了,我們去編寫一個新的啟動類,在這里也不需要加Annotation,我們先把Servlet的注冊方法拷貝過來,接下來我們要一個注冊Filter的方法,這個方法需要返回一個對象,這個對象叫FilterRegistrationBean,同樣方法名叫什么都可以,然后我們去創建這個對象,這里我們要講Filter實例化出來,然后添加URL,他這里叫addUrlPatterns,在這里可以看到其實這個參數是可變參數,如果是可變參數,我們可以去創建一個String的數組,然后在數組里給定一個URL,攔截*.do,或者是*.jsp,但是我們現在并不是讓他攔截這些,攔截Servlet就可以,攔截這個/second@Bean
public FilterRegistrationBean getFilterRegistrationBean(){FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());//bean.addUrlPatterns(new String[]{"*.do","*.jsp"});bean.addUrlPatterns("/second");return bean;
}最后要在方法上加一個@Bean的注解,這個方法我們就寫完了localhost:8080/second
<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.learn</groupId><artifactId>03-spring-boot-filter</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- springBoot的啟動器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
</project>
package com.learn.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/***SpringBoot整合Servlet方式一**<servlet>* <servlet-name>FirstServlet</servlet-name>* <servlet-class>com.learn.servlet.FirstServlet</servlet-class>*</servlet>**<servlet-mapping>* <servlet-name>FirstServlet</servlet-name>* <url-pattern>/first</url-pattern>*</servlet-mapping>**/
@WebServlet(name="FirstServlet",urlPatterns="/first")
public class FirstServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("FirstServlet............");}
}
package com.learn.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;/***SpringBoot整合Filter 方式一*<filter>* <filter-name>FirstFilter</filter-name>* <filter-class>com.learn.filter.FirstFilter</filter-class>*</filter>*<filter-mapping>* <filter-name>FirstFilter</filter-name>* <url-pattern>/first</url-pattern>*</filter-mapping>*/
//@WebFilter(filterName="FirstFilter",urlPatterns={"*.do","*.jsp"})
@WebFilter(filterName="FirstFilter",urlPatterns="/first")
public class FirstFilter implements Filter {@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {System.out.println("進入Filter");arg2.doFilter(arg0, arg1);System.out.println("離開Filter");}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}
}
package com.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication
@ServletComponentScan
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}
package com.learn.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/***SpringBoot整合Servlet方式二**/
public class SecondServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("SecondServlet..........");}}
package com.learn.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;/***SpringBoot整合Filter 方式二*/
public class SecondFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {System.out.println("進入SecondFilter");arg2.doFilter(arg0, arg1);System.out.println("離開SecondFilter");}@Overridepublic void init(FilterConfig arg0) throws ServletException {}
}
package com.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;import com.learn.filter.SecondFilter;
import com.learn.servlet.SecondServlet;/*** SpringBoot整合Filter方式二*/
@SpringBootApplication
public class App2 {public static void main(String[] args) {SpringApplication.run(App2.class, args);}/*** 注冊Servlet* @return*/@Beanpublic ServletRegistrationBean getServletRegistrationBean(){ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());bean.addUrlMappings("/second");return bean;}/*** 注冊Filter*/@Beanpublic FilterRegistrationBean getFilterRegistrationBean(){FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());//bean.addUrlPatterns(new String[]{"*.do","*.jsp"});bean.addUrlPatterns("/second");return bean;}
}
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的springboot整合filter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot整合servlet
- 下一篇: springBoot整合Listener