java - 如何在 AbstractAnnotationConfigDispatcherServletInitializer Spring 中做过滤映射

标签 java spring servlet-filters spring-java-config

问题是:我可以成功注册过滤器,但不知道如何使用此特定配置设置映射 URL。

这是我的类(class):

public class WebInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{AppConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{WebConfig.class};
    }

    @Override
    protected Filter[] getServletFilters() {

        return new Filter[]{
            new DelegatingFilterProxy("springSecurityFilterChain"),
            new DelegatingFilterProxy("customFilter")
        };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

PD 我是使用 WebApplicationInitializer 完成的,但我想使用 AbstractAnnotationConfigDispatcherServletInitializer

最佳答案

我能够做到这一点的唯一方法是使用 FilterRegistration.Dynamic 接口(interface)。在您的 WebInitializer 类中,在 onStartup 方法(父类(super class)的覆盖)中手动添加您的自定义过滤器。据我所知,目前没有比这更优雅的方法了。

@Override
public void onStartup(ServletContext servletContext)
        throws ServletException {
      FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("my-filter", new MyFilter());
      encodingFilter.setInitParameter("blah", "blah");
      encodingFilter.addMappingForUrlPatterns(null, false, "/toBeFiltered/*");

    super.onStartup(servletContext);
}

如果您希望此过滤器正常工作,那么您最好注释掉您已覆盖的 getServletFilters 方法,以便从 servletContext 正确返回此过滤器。

关于java - 如何在 AbstractAnnotationConfigDispatcherServletInitializer Spring 中做过滤映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25209319/

相关文章:

java - 非 Spring MVC 应用程序中的 MultipartFilter

Java 过滤器性能问题

java - MongoRepository findAll 与 ZonedDateTime 谓词遇到 CodecConfigurationException

java - 如何组合unicode字符?

java - JPA 主键值始终为 0

java - 如何使用 Cloud Foundry 的引导访问我的本地 MySQL 数据库?

java - 运行测试用例时无法加载 ApplicationContext

java - 用空格分割字符串

spring - 无法从 Java Spring 中的 RSS Feed 接收数据

java - J2EE 过滤器 : login page unable to load the css or any images