From c3e447c84c8a3d46ef300184787d3c6be8b792fc Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 21 Sep 2015 15:32:53 +0100 Subject: [PATCH] Order char encoding filter so it sets encoding before request is read For the character encoding filter to work, it's vital that it sets the request's encoding before any other filters attempt to read the request. This commit updates the order of OrderedCharacterEncodingFilter to be HIGHEST_PRECEDENCE and improves the existing test to check that the ordering is as required. Closes gh-3912 --- .../web/HttpEncodingAutoConfigurationTests.java | 11 +++++++++-- .../context/web/OrderedCharacterEncodingFilter.java | 3 +-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpEncodingAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpEncodingAutoConfigurationTests.java index 08521c8db82..a261dc243eb 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpEncodingAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpEncodingAutoConfigurationTests.java @@ -27,6 +27,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.boot.context.web.OrderedHiddenHttpMethodFilter; +import org.springframework.boot.context.web.OrderedHttpPutFormContentFilter; import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; @@ -145,8 +147,13 @@ public class HttpEncodingAutoConfigurationTests { static class OrderedConfiguration { @Bean - public HiddenHttpMethodFilter hiddenHttpMethodFilter() { - return new HiddenHttpMethodFilter(); + public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { + return new OrderedHiddenHttpMethodFilter(); + } + + @Bean + public OrderedHttpPutFormContentFilter httpPutFormContentFilter() { + return new OrderedHttpPutFormContentFilter(); } } diff --git a/spring-boot/src/main/java/org/springframework/boot/context/web/OrderedCharacterEncodingFilter.java b/spring-boot/src/main/java/org/springframework/boot/context/web/OrderedCharacterEncodingFilter.java index 9370cdcc077..a3281343023 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/web/OrderedCharacterEncodingFilter.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/web/OrderedCharacterEncodingFilter.java @@ -16,7 +16,6 @@ package org.springframework.boot.context.web; -import org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.core.Ordered; import org.springframework.web.filter.CharacterEncodingFilter; @@ -29,7 +28,7 @@ import org.springframework.web.filter.CharacterEncodingFilter; public class OrderedCharacterEncodingFilter extends CharacterEncodingFilter implements Ordered { - private int order = FilterRegistrationBean.REQUEST_WRAPPER_FILTER_MAX_ORDER - 9800; + private int order = Ordered.HIGHEST_PRECEDENCE; @Override public int getOrder() {