SpringBoot的優點,就是整合了所有框架,便於快速開發,其他的就不多說了。在SpirngBoot工程中,過濾器Filter是經常使用的,下面先介紹一下過濾器的配置方法。
第一種方法:@WebFilter註解方式
使用@WebFilter註解爲聲明當前類爲filter,第一個參數爲該filter起一個名字,第二個參數爲說明要攔截的請求地址,當前類需要實現Filter接口,裏面有三個方法,分別爲過濾器初始化、過濾方法和過濾器銷燬。
@WebFilter(filterName = "myFilter1", urlPatterns = "/*")
public class MyFilter1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("進入過濾器初始化方法");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
log.info("myFilter1 begin");
try {
System.out.println("進入過濾器業務邏輯方法");
chain.doFilter(request, response);
} catch (Exception e) {
log.error("error!", e);
}
log.info("myFilter1 end");
}
@Override
public void destroy() {
System.out.println("進入過濾器銷燬方法");
}
}
在SpringBoot啓動類上加上以下註解
@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註解方式
MyFilter.java類,不要加註解@WebFilter,代碼如下:
public class MyFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) srequest;
System.out.println("this is MyFilter,url :"+request.getRequestURI());
srequest.setCharacterEncoding("UTF-8");
sresponse.setContentType("text/html;chartset=UTF-8");
filterChain.doFilter(srequest, sresponse);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
新建配置類WebConfiguration.java,配置bean,代碼如下:
@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter{
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter( MyFilter());
registration.addUrlPatterns("/*");
/*registration.addInitParameter("paramName", "paramValue");*/
registration.setName("MyFilter");
registration.setOrder(1);
return registration;
}
}
然後就可以啓動,查看運行效果
遇到的問題:SpringBoot啓動時,無法加載到配置的Filter過濾器
原因分析:確認啓動類和config的包是否在同一級目錄下
正確目錄結構爲:
歡迎關注以下公衆號進行交流: