如何在Spring中添加带有WebMvcConfigurerAdapter的Filter?

smw*_*dia 7 spring spring-mvc servlet-filters

有了WebApplicationInitializer,我可以轻松地ServletContextonStartup()方法中添加一个过滤器.

如何添加过滤器WebMvcConfigurerAdapter?我必须使用XML吗?

添加1

为了帮助其他人更轻松地理解Spring Web配置,我绘制了下面的插图.

现在您只需要首先了解rationalSpring Web配置的背后.然后选择要继承的配置类以及从下面覆盖的方法.

查找它比记住这么多东西要痛苦得多.

在此输入图像描述

关于Spring Web Initialization的一篇很好的文章:

http://www.kubrynski.com/2014/01/understanding-spring-web-initialization.html

添加2

根据Tunaki我的回复,我查了一下AbstractDispatcherServletInitializer.过滤器注册发生在以下代码中:

在此输入图像描述

即使我覆盖绿色getServletFilters()方法,我仍然无法访问Dyanmic结果registerServletFilter().那么如何配置过滤器addMappingForUrlPatterns()呢?

我似乎have to覆盖了整个registerDispatcherServlet()方法.

Tun*_*aki 12

WebMvcConfigurer是一个接口,用于为通过启用的Spring MVC定制基于Java的配置@EnableWebMvc.WebMvcConfigurerAdapter只是一个为此接口提供默认空方法的适配器.

它没有配置DispatcherServlet,这是使用的过滤器.因此,您无法使用WebMvcConfigurer配置servlet过滤器.

要轻松配置过滤器,您可以继承AbstractDispatcherServletInitializer并覆盖getServletFilters():

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] { new CharacterEncodingFilter() };
    }

}
Run Code Online (Sandbox Code Playgroud)

如果要进一步配置过滤器,则必须覆盖onStartup:

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    servletContext.addFilter("name", CharacterEncodingFilter.class)
                  .addMappingForUrlPatterns(null, false, "/*");
}
Run Code Online (Sandbox Code Playgroud)

  • AbstractDispatcherServletInitializer 还需要实现 createServletApplicationContext、getServletMappings 和 createRootApplicationContext,并且似乎没有应用过滤器。 (2认同)