为嵌入式 Tomcat 设置“relaxedQueryChars”
Posted
技术标签:
【中文标题】为嵌入式 Tomcat 设置“relaxedQueryChars”【英文标题】:Setting 'relaxedQueryChars' for embedded Tomcat 【发布时间】:2019-01-13 04:25:12 【问题描述】:如何为 Spring Boot 嵌入式 Tomcat 设置 relaxedQueryChars
?
here 描述的连接器属性,但 Spring Boot documentation 没有列出这样的参数。
Tomcat的Connector属性一般如何设置?
【问题讨论】:
【参考方案1】:我不确定您是否可以使用属性文件执行此操作。我相信这应该有效
@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");
);
【讨论】:
正确,但可以使用 lambdafactory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedQueryChars", "yourvaluehere"))
进行简化【参考方案2】:
如果您使用的是 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", "<>[\\]^`|");
);
【讨论】:
不要忘记为包含这个的类添加@Configuration注解。【参考方案3】:我这样做是为了解决我的问题:
@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", "<>[\\]^`|");
);
【讨论】:
【参考方案4】:最简单的方法是配置服务器(在 application.properties 中添加一行)。 您可以添加如下内容:
server.tomcat.relaxed-path-chars=<,>,etc
Spring Documentation URI 路径中应允许的其他未编码字符的逗号分隔列表。只允许使用“ [ \ ] ^ ` | ”。*
【讨论】:
以上是关于为嵌入式 Tomcat 设置“relaxedQueryChars”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 嵌入式 tomcat 设置会话超时