How to add filter to spring mvc in java config?
In this post I show you how to add filter in two different kinds of spring based configurations.
Configuration by WebApplicationInitializer
package raphaelsolarski.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import raphaelsolarski.filter.MyFilter;
import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;
public class MyWebAppInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) {
//here I can set up any kind of spring context -> xml/java...
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.scan("raphaelsolarski");
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.addMapping("/");
container.addFilter("My filter", MyFilter.class).addMappingForServletNames(null, false, "dispatcher");
//or container.addFilter("My filter", MyFilter.class).addMappingForUrlPatterns(null, false, "/*");
}
}
Configuration by AbstractAnnotationConfigDispatcherServletInitializer
package com.raphaelsolarski.config;
import com.raphaelsolarski.filter.MyFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
public class MyDispatcher extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<!--?-->[] getRootConfigClasses() {
return null;
}
@Override
protected Class<!--?-->[] getServletConfigClasses() {
return new Class<!--?-->[] {SpringConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
@Override
protected Filter[] getServletFilters() {
return new Filter[] { new MyFilter() };
}
}