修改SpringBoot内嵌Tomcat的初始化参数:readonly

Apache Tomcat官方确认并修复了两个高危漏洞漏洞,给出的临时解决办法是:
禁用HTTP PUT方法:
在Tomcat的web.xml 文件中配置org.apache.catalina.servlets.DefaultServlet的初始化参数;

<init-param>
<param-name>readonly</param-name> 
<param-value>true</param-value>
</init-param>

但是在Springboot中,没有web.xml文件,因此并不知道去哪里设置这个属性。求大神指导!
谢谢~

阅读 9.7k
1 个回答

你可以通过bean配置的方式

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {

return new EmbeddedServletContainerCustomizer() {
    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        if (container.getClass().isAssignableFrom(TomcatEmbeddedServletContainerFactory.class)) {
            TomcatEmbeddedServletContainerFactory tomcatContainer = (TomcatEmbeddedServletContainerFactory) container;
            tomcatContainer.addContextCustomizers(new ContextSecurityCustomizer());
        }
    }
};

}

private static class ContextSecurityCustomizer implements TomcatContextCustomizer {

@Override
public void customize(Context context) {
    SecurityConstraint constraint = new SecurityConstraint();
    SecurityCollection securityCollection = new SecurityCollection();
    securityCollection.setName("restricted_methods");
    securityCollection.addPattern("/*");
    securityCollection.addMethod(HttpMethod.PUT.toString());//这里设置你想禁用的http method
    constraint.addCollection(securityCollection);
    constraint.setAuthConstraint(true);
    context.addConstraint(constraint);
}

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题