默认情况下,HTTP"服务器"嵌入式Tomcat的Spring Boot应用程序的标题是:
Server → Apache-Coyote/1.1
如何在 Spring Boot 中实现另一个(自定义)"服务器"头?
对于Tomcat本身,可以通过<Connector>
属性在XML中的server
元素进行配置:
来自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服务器。
答案 0 :(得分:8)
您可以使用安全配置中的custom headers设置StaticHeadersWriter,这是一个Java配置示例:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.headers()
.addHeaderWriter(new StaticHeadersWriter("Server","here to serve you"))
....
}
...
}
答案 1 :(得分:3)
您可以使用自定义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() {
}
};
}
答案 2 :(得分:3)
仅供参考,在最新版本的Spring Boot中,您只需设置&#34; server.server-header&#34;财产实现相同。
答案 3 :(得分:2)
如果您不使用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;
}