spring-boot使用教程(二):增長自定義filter

傳統的javaEE增長Filter是在web.xml中配置,如如下代碼:

<filter>
     <filter-name>TestFilter</filter-name>
        <filter-class>com.cppba.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>TestFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <init-param>
       <param-name>paramName</param-name>
       <param-value>paramValue</param-value>
    </init-param>
</filter-mapping>

然而spring-boot中很明顯不能這樣實現,那怎麼辦呢?看完下面的教程,答案天然知道了。java

老方法(新方法請直接下拉)

1.建立自定義Filter

package com.cppba.filter;

import javax.servlet.*;
import java.io.IOException;

public class TestFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        System.out.println("TestFilter");
    }

    @Override
    public void destroy() {

    }
}

2.在ApplicationConfiguration.java中增長一個@bean

@Bean
    public FilterRegistrationBean testFilterRegistration() {

        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new TestFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("testFilter");
        registration.setOrder(1);
        return registration;
    }

3.啓動項目

你會看到控制檯打印以下代碼:git

 

https://github.com/bigbeef/cppba-spring-bootgithub

4.訪問項目

最後咱們訪問如下http://127.0.0.1:8080/test
若是你看到控制檯打印出:TestFilterweb

https://github.com/bigbeef/cppba-spring-boot
恭喜你,配置成功!spring

 

2017-04-20 最新spring-boot增長Filter方法

首先定義一個Filterapp

@Order(1)
//重點
@WebFilter(filterName = "testFilter1", urlPatterns = "/*")
public class TestFilterFirst implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        System.out.println("TestFilter1");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

比較核心的代碼是自定義類上面加上@WebFilter,其中@Order註解表示執行過濾順序,值越小,越先執行ide

咱們在spring-boot的入口處加上以下註解@ServletComponentScan:spring-boot

@SpringBootApplication(scanBasePackages = "com.cppba")
//重點
@ServletComponentScan
public class Application {
    public static void main(String[] args) throws UnknownHostException {
        SpringApplication app = new SpringApplication(Application.class);
        Environment environment = app.run(args).getEnvironment();
    }
}

這種方法效果和上面版本同樣,可是用起來更加方便!url

相關文章
相關標籤/搜索