過濾器的用法就不多說了
新建Filter的繼承類:MemberFilter(放置包需要注意)
@WebFilter(urlPatterns = "/*") @Order(1) public class MemberFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.err.println("自定義過濾器MemberFilter->doFilter"); } @Override public void destroy() { } }
配合@order使用,生命排序。
過濾器不在啟動類掃描范圍時,需要注意的是在啟動類需要添加@ServletComponentScan掃描,其中包名自定義
@ServletComponentScan(basePackages = {"com.example.controller.filter"})
使用bean的情況下,jar打包是可以直接@Autowired使用的,轉換war打包方式部署,獲取的bean為null,這時候只能手動添加了
新建@Configuration注解類:FilterRegistrationConfig
@Configuration
public class FilterRegistrationConfig {
@Bean
public MemberFilter memberFilter() {
return new MemberFilter();
}
@Bean
public FilterRegistrationBean filterProxy() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
DelegatingFilterProxy httpBasicFilter = new DelegatingFilterProxy();
registrationBean.setFilter(httpBasicFilter);
Map<String, String> m = new HashMap<String, String>();
m.put("targetBeanName", "memberFilter");
m.put("targetFilterLifecycle", "true");
registrationBean.setInitParameters(m);
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/*");
registrationBean.setUrlPatterns(urlPatterns);
return registrationBean;
}
}
這時候還需要注意假若使用了shiro,況且上述注冊的過濾器有使用到的情況下,shiroFiler的過濾必須定義在前(解決shiro報錯找不到原因)
@Bean
public FilterRegistrationBean delegatingFilterProxy() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
DelegatingFilterProxy proxy = new DelegatingFilterProxy();
proxy.setTargetFilterLifecycle(true);
proxy.setTargetBeanName("shiroFilter");
filterRegistrationBean.setFilter(proxy);
return filterRegistrationBean;
}
