首页 文章

如何为Spring Boot应用程序设置自定义Http头“服务器”

提问于
浏览
5

默认情况下,嵌入式Tomcat的Spring Boot应用程序的HTTP“server”标头是:

Server → Apache-Coyote/1.1

如何在 Spring Boot 中实现另一个(自定义)"server"标头?

对于Tomcat本身,可以通过 server 属性在XML中的 <Connector> 元素进行配置:

来自https://tomcat.apache.org/tomcat-8.0-doc/security-howto.html#Connectors

server属性控制Server HTTP标头的值 . Tomcat 4.1.x到8.0.x的此标头的默认值是Apache-Coyote / 1.1 . 此标头可以向合法客户端和攻击者提供有限的信息 .

但是攻击者仍然会知道这是一个Tomcat服务器 .

4 回答

  • 3

    您可以使用安全配置中的StaticHeadersWriter设置custom headers,这是一个Java配置示例:

    public class SecurityConfig extends WebSecurityConfigurerAdapter {
      protected void configure(HttpSecurity http) throws Exception {
        http
          .headers()
            .addHeaderWriter(new StaticHeadersWriter("Server","here to serve you"))
          ....
      }
      ...
    }
    
  • 2

    您可以使用自定义Filter实现添加其他标头(或覆盖现有标头) . 例如:

    @Bean
    public Filter myFilter() {
        return new Filter() {
            @Override
            public void init(FilterConfig filterConfig) throws ServletException {
    
            }
    
            @Override
            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                final HttpServletResponse res = (HttpServletResponse) servletResponse;
                res.addHeader("Server", "my very custom server");
    
                filterChain.doFilter(servletRequest, servletResponse);
            }
    
            @Override
            public void destroy() {
    
            }
        };
    }
    
  • 8

    仅供参考,在最新版本的Spring Boot中,您可以简单地设置“server.server-header”属性来实现相同的功能 .

  • 3

    如果您不使用Spring Security,则可以使用TomcatEmbeddedServletContainerFactory并添加TomcatConnectorCustomizer:

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.setTomcatConnectorCustomizers(Collections.singletonList(c -> c.setProperty("Server", "Pleased to serve you")));
        return tomcat;
    }
    

相关问题