Java 设置';relaxedQueryChars&x27;对于嵌入式Tomcat
如何为Spring Boot嵌入式Tomcat设置Java 设置';relaxedQueryChars&x27;对于嵌入式Tomcat,java,spring-boot,tomcat,Java,Spring Boot,Tomcat,如何为Spring Boot嵌入式Tomcat设置relaxedQueryChars 描述了连接器属性,但Spring Boot没有列出此类参数 一般来说,如何设置Tomcat的连接器属性?我不确定是否可以使用属性文件进行设置。我相信这应该行得通 @Component public class MyTomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFac
relaxedQueryChars
描述了连接器属性,但Spring Boot没有列出此类参数
一般来说,如何设置Tomcat的连接器属性?我不确定是否可以使用属性文件进行设置。我相信这应该行得通
@Component
public class MyTomcatWebServerCustomizer
implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setAttribute("relaxedQueryChars", "yourvaluehere");
}
});
}
}
@组件
公共类MyTomcatWebServerCustomizer
实现WebServerFactoryCustomizer{
@凌驾
公共void自定义(TomcatServletWebServerFactory){
addConnectorCustomizer(新的TomcatConnectorCustomizer(){
@凌驾
公共void自定义(连接器){
setAttribute(“relaxedQueryChars”、“yourvaluehere”);
}
});
}
}
我这样做是为了解决我的问题:
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(){
return new MyCustomizer();
}
private static class MyCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer factory) {
if(factory instanceof TomcatEmbeddedServletContainerFactory) {
customizeTomcat((TomcatEmbeddedServletContainerFactory) factory);
}
}
void customizeTomcat(TomcatEmbeddedServletContainerFactory factory) {
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
connector.setAttribute("relaxedPathChars", "<>[\\]^`{|}");
connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}");
});
}
}
@Bean
公共嵌入式ServletContainerCustomizer containerCustomizer(){
返回新的MyCustomizer();
}
私有静态类MyCustomizer实现EmbeddedServletContainerCustomizer{
@凌驾
public void自定义(ConfigurableMbeddedServletContainer工厂){
if(TomcatEmbeddedServletContainerFactory的工厂实例){
定制MCAT((TomcatEmbeddedServletContainerFactory)工厂);
}
}
void customizeTomcat(TomcatEmbeddedServletContainerFactory工厂){
factory.AddConnectorCustomizer((TomcatConnectorCustomizer)连接器->{
setAttribute(“relaxedPathChars”,“[\\]^`{124;}”);
setAttribute(“relaxedQueryChars”,“[\\]^`{124;}”);
});
}
}
如果您使用的是Spring Boot 2.x,则需要使用WebSeerverFactoryCustomizer,如下所示
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory>
containerCustomizer(){
return new EmbeddedTomcatCustomizer();
}
private static class EmbeddedTomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
connector.setAttribute("relaxedPathChars", "<>[\\]^`{|}");
connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}");
});
}
}
@Bean
公共WebServerFactoryCustomizer
containerCustomizer(){
返回新的EmbeddedTomcatCustomizer();
}
私有静态类EmbeddedTomcatCustomizer实现WebServerFactoryCustomizer{
@凌驾
公共void自定义(TomcatServletWebServerFactory){
factory.AddConnectorCustomizer((TomcatConnectorCustomizer)连接器->{
setAttribute(“relaxedPathChars”,“[\\]^`{124;}”);
setAttribute(“relaxedQueryChars”,“[\\]^`{124;}”);
});
}
}
最简单的方法是配置服务器(在application.properties中添加一行)。
您可以添加如下内容:
server.tomcat.relaxed-path-chars=<,>,etc
server.tomcat.relaxed path chars=,等等
- URI路径中应允许的其他未编码字符的逗号分隔列表。只允许使用“<>[\]^`{124;}”*
factory.addConnectorCustomizers(连接器->连接器.setAttribute(“relaxedQueryChars”,“yourvaluehere”))进行简化。