SpringBoot访问Filter有两种方式
第一种方式
- 实现Filter接口,并听过@WebFilter(value = "/*")注解标注
- 在入口添加
@ServletComponentScan
注解
package vip.fkandy.demo1;
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;
@WebFilter(value = "/*")
public class LogFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("income log filter " + request.getRemoteHost());
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
package vip.fkandy.demo1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@ServletComponentScan // 扫描Servlet路径,也可以指定basePackages
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping(value = "/hello")
public String hello() {
return "hello";
}
}
第二种方式
- 写一个类实现Filter接口
- 创建添加@SpringBootConfiguration配置类,通过FilterRegistrationBean创建
package vip.fkandy.demo2;
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 EchoFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("EchoFilter init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("EchoFilter doFilter");
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("EchoFilter destroy");
}
}
package vip.fkandy.demo2;
import java.util.Arrays;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
@SpringBootConfiguration
public class ServletConfiguration {
/**
* Filter
* @return
*/
@Bean
public FilterRegistrationBean<EchoFilter> createEchoRegistBean() {
FilterRegistrationBean<EchoFilter> filter = new FilterRegistrationBean<EchoFilter>();
filter.setFilter(new EchoFilter());
filter.setUrlPatterns(Arrays.asList("/*"));
return filter;
}
}