学习问题记录
用SpringBoot开发的项目在进行测试时,除GET、POST之外的HTTP请求方式都需要禁止,由于使用的内置Tomcat,试了几种方式,最后记录一下。
解决方式:
对独立启动的tomcat,修改配置文件即可,在网上可以找到很多。而对Springboot内置的tomcat,要添加配置类或者配置properties文件:
第一种方式(最终使用的):
. 添加配置类:
使用环境:JDK1.8
不需要添加maven依赖,tomcat内置在springboot包里。
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcatServletContainerFactory = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
collection.addPattern("/ywyydsj/*");
collection.addMethod("HEAD");
collection.addMethod("PUT");
collection.addMethod("PATCH");
collection.addMethod("DELETE");
collection.addMethod("OPTIONS");
collection.addMethod("TRACE");
collection.addMethod("COPY");
collection.addMethod("SEARCH");
collection.addMethod("PROPFIND");
constraint.addCollection(collection);
constraint.setAuthConstraint(true);
context.addConstraint(constraint);
context.setUseHttpOnly(true);
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcatServletContainerFactory.addConnectorCustomizers(connector -> {
connector.setAllowTrace(true);
});
return tomcatServletContainerFactory;
}
}
第二种方式(仅供参考,试了下没起作用):
在配置文件application.porperties中添加如下配置:
#禁止不安全的HTTP方法
server.tomcat.port-header=HEAD,PUT,DELETE,OPTIONS,TRACE,COPY,SEARCH,PROPFIND
出现过一次OPTIONS在设置后,仍然可以使用情况,添加配置如下:
spring.mvc.dispatch-options-request=true
配置完成后可以使用POSTMAN进行测试,查看禁用的方法是否禁用成功。