Skip to content

Commit a2f4c1c

Browse files
committed
Add support for configuring allowSessionOverride via the environment
This commit adds support for using the environment to configure the Freemarker and Velocity view resolvers to allow session overrides. Closes gh-3410
1 parent f9a7755 commit a2f4c1c

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/template/AbstractTemplateViewResolverProperties.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ public abstract class AbstractTemplateViewResolverProperties extends
7070
*/
7171
private boolean exposeSpringMacroHelpers = true;
7272

73+
/**
74+
* Set whether HttpSession attributes are allowed to override (hide) controller
75+
* generated model attributes of the same name.
76+
*/
77+
private boolean allowSessionOverride = false;
78+
7379
protected AbstractTemplateViewResolverProperties(String defaultPrefix,
7480
String defaultSuffix) {
7581
this.prefix = defaultPrefix;
@@ -124,6 +130,14 @@ public void setAllowRequestOverride(boolean allowRequestOverride) {
124130
this.allowRequestOverride = allowRequestOverride;
125131
}
126132

133+
public boolean isAllowSessionOverride() {
134+
return this.allowSessionOverride;
135+
}
136+
137+
public void setAllowSessionOverride(boolean allowSessionOverride) {
138+
this.allowSessionOverride = allowSessionOverride;
139+
}
140+
127141
public boolean isExposeSpringMacroHelpers() {
128142
return this.exposeSpringMacroHelpers;
129143
}
@@ -152,6 +166,7 @@ public void applyToViewResolver(Object viewResolver) {
152166
resolver.setViewNames(getViewNames());
153167
resolver.setExposeRequestAttributes(isExposeRequestAttributes());
154168
resolver.setAllowRequestOverride(isAllowRequestOverride());
169+
resolver.setAllowSessionOverride(isAllowSessionOverride());
155170
resolver.setExposeSessionAttributes(isExposeSessionAttributes());
156171
resolver.setExposeSpringMacroHelpers(isExposeSpringMacroHelpers());
157172
resolver.setRequestContextAttribute(getRequestContextAttribute());

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerAutoConfigurationTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,17 @@
3131
import org.springframework.mock.web.MockHttpServletRequest;
3232
import org.springframework.mock.web.MockHttpServletResponse;
3333
import org.springframework.mock.web.MockServletContext;
34+
import org.springframework.test.util.ReflectionTestUtils;
3435
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
3536
import org.springframework.web.servlet.View;
3637
import org.springframework.web.servlet.support.RequestContext;
38+
import org.springframework.web.servlet.view.AbstractTemplateViewResolver;
3739
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
3840
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
3941

4042
import static org.hamcrest.Matchers.containsString;
4143
import static org.hamcrest.Matchers.equalTo;
44+
import static org.hamcrest.Matchers.is;
4245
import static org.hamcrest.Matchers.notNullValue;
4346
import static org.junit.Assert.assertThat;
4447

@@ -139,6 +142,15 @@ public void disableCache() {
139142
equalTo(0));
140143
}
141144

145+
@Test
146+
public void allowSessionOverride() {
147+
registerAndRefreshContext("spring.freemarker.allow-session-override:true");
148+
AbstractTemplateViewResolver viewResolver = this.context
149+
.getBean(FreeMarkerViewResolver.class);
150+
assertThat((Boolean) ReflectionTestUtils.getField(viewResolver,
151+
"allowSessionOverride"), is(true));
152+
}
153+
142154
@SuppressWarnings("deprecation")
143155
@Test
144156
public void customFreeMarkerSettings() {

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/velocity/VelocityAutoConfigurationTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,18 @@
3535
import org.springframework.mock.web.MockHttpServletRequest;
3636
import org.springframework.mock.web.MockHttpServletResponse;
3737
import org.springframework.mock.web.MockServletContext;
38+
import org.springframework.test.util.ReflectionTestUtils;
3839
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
3940
import org.springframework.web.servlet.View;
4041
import org.springframework.web.servlet.support.RequestContext;
42+
import org.springframework.web.servlet.view.AbstractTemplateViewResolver;
4143
import org.springframework.web.servlet.view.velocity.VelocityConfigurer;
4244
import org.springframework.web.servlet.view.velocity.VelocityViewResolver;
4345

4446
import static org.hamcrest.Matchers.containsString;
4547
import static org.hamcrest.Matchers.equalTo;
4648
import static org.hamcrest.Matchers.instanceOf;
49+
import static org.hamcrest.Matchers.is;
4750
import static org.hamcrest.Matchers.notNullValue;
4851
import static org.junit.Assert.assertThat;
4952

@@ -183,6 +186,15 @@ public void usesEmbeddedVelocityViewResolver() {
183186
assertThat(resolver, instanceOf(EmbeddedVelocityViewResolver.class));
184187
}
185188

189+
@Test
190+
public void allowSessionOverride() {
191+
registerAndRefreshContext("spring.velocity.allow-session-override:true");
192+
AbstractTemplateViewResolver viewResolver = this.context
193+
.getBean(VelocityViewResolver.class);
194+
assertThat((Boolean) ReflectionTestUtils.getField(viewResolver,
195+
"allowSessionOverride"), is(true));
196+
}
197+
186198
private void registerAndRefreshContext(String... env) {
187199
EnvironmentTestUtils.addEnvironment(this.context, env);
188200
this.context.register(VelocityAutoConfiguration.class);

spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ content into your application; rather pick only the properties that you need.
158158
159159
# FREEMARKER ({sc-spring-boot-autoconfigure}/freemarker/FreeMarkerAutoConfiguration.{sc-ext}[FreeMarkerAutoConfiguration])
160160
spring.freemarker.allow-request-override=false
161+
spring.freemarker.allow-session-override=false
161162
spring.freemarker.cache=true
162163
spring.freemarker.check-template-location=true
163164
spring.freemarker.charset=UTF-8
@@ -183,6 +184,7 @@ content into your application; rather pick only the properties that you need.
183184
184185
# VELOCITY TEMPLATES ({sc-spring-boot-autoconfigure}/velocity/VelocityAutoConfiguration.{sc-ext}[VelocityAutoConfiguration])
185186
spring.velocity.allow-request-override=false
187+
spring.velocity.allow-session-override=false
186188
spring.velocity.cache=true
187189
spring.velocity.check-template-location=true
188190
spring.velocity.charset=UTF-8

0 commit comments

Comments
 (0)