SpringBoot無法掃描到@Configuration註解的Filter過濾器

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的包是否在同一級目錄下

正確目錄結構爲:

 

歡迎關注以下公衆號進行交流:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章