Configuring filters in springboot and possible problems

  There are two ways to add filters in springboot:

    1. By creating FilterRegistrationBean (it is recommended to use this method for unified management, and if the annotation method is not local debugging, if you need to add cookies in the filter, it may not be written to the front end)

    2. By annotating @WebFilter

 

  Create multiple filters and set the execution order by creating a FilterRegistrationBean:

     1. Create two classes TestFilter1 and TestFilter2 that implement the Filter interface

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. Create a configuration class

      If there are multiple filters, create multiple FilterRegistrationBeans. If you need to specify the execution order of the filters, you can configure it through registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1). The larger the value, the later the execution order.

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 configuration
 * @author zcj
 *
 */
@Configuration
public class FilterConfig2 {

    @Bean
    public FilterRegistrationBean companyUrlFilterRegister() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
         // Injection filter 
        registration.setFilter( new TestFilter1());
         // Intercept rules 
        registration.addUrlPatterns("/*" );
         // Filter name 
        registration.setName("testFilter1" ) ;
         // Filter order 
        registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
         return registration;
    }
    
    @Bean
    public FilterRegistrationBean outLinkSecurityFilterRegister() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
         // Injection filter 
        registration.setFilter( new TestFilter2());
         // Intercept rules 
        registration.addUrlPatterns("/*" );
         // Filter name 
        registration.setName("testFilter2" ) ;
         // Filter order 
        registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1 );
         return registration;
    }
    
}

    

    By annotating @WebFilter

     1. Add the @ServletComponentScan annotation to the startup class to automatically scan packages with filter annotations

        2. Use the combination of @WebFilter and @Order on the class to achieve

    

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= {"/*"})
@Order(FilterRegistrationBean.LOWEST_PRECEDENCE)
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

    }

}

 

    

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324853792&siteId=291194637