当前位置: 首页 > 面试题库 >

在Spring Boot应用程序中添加Servlet过滤器

苍志文
2023-03-14
问题内容

我想让ETag支持。为此ShallowEtagHeaderFilter,需要做所有工作。我如何在不声明的情况下添加它web.xml(实际上不存在,因为到目前为止我已经不知何故了)?

PS我使用Spring Boot 1.1.4

PPS这是一个完整的解决方案

package cuenation.api;

import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.ShallowEtagHeaderFilter;

import javax.servlet.DispatcherType;
import java.util.EnumSet;

@Configuration
public class WebConfig {

    @Bean
    public FilterRegistrationBean shallowEtagHeaderFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new ShallowEtagHeaderFilter());
        registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
        registration.addUrlPatterns("/cue-categories");
        return registration;
    }

}

问题答案:

When using Spring Boot
如参考文档中所述,唯一的步骤是在配置类中将该过滤器声明为Bean,就这样!

@Configuration
public class WebConfig {

  @Bean
  public Filter shallowEtagHeaderFilter() {
    return new ShallowEtagHeaderFilter();
  }
}

When using Spring MVC

你可能已经扩展了WebApplicationInitializer。如果没有,那么你应该将webapp配置从web.xml文件转换为WebApplicationInitializer类。

如果上下文配置位于XML文件中,则可以创建扩展的类AbstractDispatcherServletInitializer-如果使用配置类,AbstractAnnotationConfigDispatcherServletInitializer则是正确的选择。

无论如何,你都可以添加过滤器注册:

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


 类似资料:
  • 我想要ETag支持。为此,有一个来完成所有工作。我如何添加它而不在我的中声明它(它实际上并不存在,因为我到目前为止不知怎的没有它)?

  • 我需要在每个响应中添加标题。我正打算在下面做 我想在之后这样做,以便一旦控制器处理它,我只是在返回客户端之前添加标头。是正确的吗? 但如何编写响应过滤器? 在已返回,对响应执行任何操作都为时已晚。此时,整个响应已经发送到客户端,您的代码无法访问它。 我觉得上面的说法不对。我不能在过滤链之后添加标题。doFilter(请求、响应)?如果不是,为什么? 我使用的是spring mvc。

  • 问题内容: 尽管我看过很多类似的问题,但没有找到明确的答案。使用Servlet Spec 2.5,是否可以以编程方式添加Servlet过滤器和映射?首选位置在Servlet.init()或ServletContextListener.contextInitialized()中。 问题答案: 不,不是通过标准的Servlet 2.5 API。这是在Servlet 3.0 中引入的。最好的选择是创建一

  • 问题内容: 我正在与现有的servlet集成,该servlet从HTTP标头中提取一些属性。基本上,我实现的接口无法访问实际请求,它只能访问HTTP标头的k-> v映射。 我需要传递一个请求参数。计划是使用servlet过滤器从参数到标头值,但是HttpServletRequest对象当然没有addHeader()方法。 有任何想法吗? 问题答案: Extend ,覆盖标头吸气剂以返回参数: ..

  • 我有一个java应用程序,需要部署在weblogic服务器中。我目前正在为该应用程序制作ear文件。我的ear文件中有一个ejb jar。我想将log4j2 jar添加到此应用程序中。所以我的文件夹结构是 目前,我已经将JAR放在APP-INF文件夹/lib和META-INF/application中。xml我把JAR放在了模块中。这是我的申请表。xml 但它不接受log4j罐子。有什么解决方案吗

  • 我正在运行一个springboot应用程序,它需要信任我在本地信任库中添加的证书。现在我将它设置在intellij中的运行配置选项下,它有效。ex- 我想知道有没有办法从应用程序设置它。以我们设置spring属性的方式在springboot中创建属性文件?