diff --git a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/howto/webserver.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/howto/webserver.adoc index 9843d9de1d..2e76260520 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/howto/webserver.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/howto/webserver.adoc @@ -489,23 +489,6 @@ include::code:MyTomcatConfiguration[] -[[howto.webserver.use-tomcat-legacycookieprocessor]] -=== Use Tomcat's LegacyCookieProcessor -By default, the embedded Tomcat used by Spring Boot does not support "Version 0" of the Cookie format, so you may see the following error: - -[indent=0] ----- - java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value ----- - -If at all possible, you should consider updating your code to only store values compliant with later Cookie specifications. -If, however, you cannot change the way that cookies are written, you can instead configure Tomcat to use a `LegacyCookieProcessor`. -To switch to the `LegacyCookieProcessor`, use an `WebServerFactoryCustomizer` bean that adds a `TomcatContextCustomizer`, as shown in the following example: - -include::code:MyLegacyCookieProcessorConfiguration[] - - - [[howto.webserver.enable-tomcat-mbean-registry]] === Enable Tomcat's MBean Registry Embedded Tomcat's MBean registry is disabled by default. diff --git a/spring-boot-project/spring-boot-docs/src/main/java/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfiguration.java b/spring-boot-project/spring-boot-docs/src/main/java/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfiguration.java deleted file mode 100644 index fb1702f99d..0000000000 --- a/spring-boot-project/spring-boot-docs/src/main/java/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfiguration.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2012-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.docs.howto.webserver.usetomcatlegacycookieprocessor; - -import org.apache.tomcat.util.http.LegacyCookieProcessor; - -import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; -import org.springframework.boot.web.server.WebServerFactoryCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration(proxyBeanMethods = false) -public class MyLegacyCookieProcessorConfiguration { - - @Bean - public WebServerFactoryCustomizer cookieProcessorCustomizer() { - return (factory) -> factory - .addContextCustomizers((context) -> context.setCookieProcessor(new LegacyCookieProcessor())); - } - -} diff --git a/spring-boot-project/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfiguration.kt b/spring-boot-project/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfiguration.kt deleted file mode 100644 index 86bb0125d6..0000000000 --- a/spring-boot-project/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfiguration.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2012-2022 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.docs.howto.webserver.usetomcatlegacycookieprocessor - -import org.apache.catalina.Context -import org.apache.tomcat.util.http.LegacyCookieProcessor -import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer -import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory -import org.springframework.boot.web.server.WebServerFactoryCustomizer -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration - -@Configuration(proxyBeanMethods = false) -class MyLegacyCookieProcessorConfiguration { - - @Bean - fun cookieProcessorCustomizer(): WebServerFactoryCustomizer { - return WebServerFactoryCustomizer { factory: TomcatServletWebServerFactory -> - factory - .addContextCustomizers(TomcatContextCustomizer { context: Context -> - context.cookieProcessor = LegacyCookieProcessor() - }) - } - } - -} diff --git a/spring-boot-project/spring-boot-docs/src/test/java/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfigurationTests.java b/spring-boot-project/spring-boot-docs/src/test/java/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfigurationTests.java deleted file mode 100644 index 29fde8b168..0000000000 --- a/spring-boot-project/spring-boot-docs/src/test/java/org/springframework/boot/docs/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfigurationTests.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2012-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.docs.howto.webserver.usetomcatlegacycookieprocessor; - -import org.apache.catalina.Context; -import org.apache.tomcat.util.http.LegacyCookieProcessor; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; -import org.springframework.boot.web.embedded.tomcat.TomcatWebServer; -import org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor; -import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link MyLegacyCookieProcessorConfiguration}. - * - * @author Andy Wilkinson - */ -class MyLegacyCookieProcessorConfigurationTests { - - @Test - void cookieProcessorIsCustomized() { - ServletWebServerApplicationContext applicationContext = (ServletWebServerApplicationContext) new SpringApplication( - TestConfiguration.class, MyLegacyCookieProcessorConfiguration.class).run(); - Context context = (Context) ((TomcatWebServer) applicationContext.getWebServer()).getTomcat().getHost() - .findChildren()[0]; - assertThat(context.getCookieProcessor()).isInstanceOf(LegacyCookieProcessor.class); - } - - @Configuration(proxyBeanMethods = false) - static class TestConfiguration { - - @Bean - TomcatServletWebServerFactory tomcatFactory() { - return new TomcatServletWebServerFactory(0); - } - - @Bean - WebServerFactoryCustomizerBeanPostProcessor postProcessor() { - return new WebServerFactoryCustomizerBeanPostProcessor(); - } - - } - -}