Skip to content

Commit 57f0a7d

Browse files
author
Keith Donald
committed
added detectInterceptors compatibility check
1 parent 5e1c00c commit 57f0a7d

File tree

9 files changed

+38
-72
lines changed

9 files changed

+38
-72
lines changed

org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
public class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
5656

5757
private static final boolean jsr303Present = ClassUtils.isPresent(
58-
"javax.validation.Validator", InterceptorsBeanDefinitionParser.class.getClassLoader());
58+
"javax.validation.Validator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
5959

6060

6161
public BeanDefinition parse(Element element, ParserContext parserContext) {
@@ -64,6 +64,7 @@ public BeanDefinition parse(Element element, ParserContext parserContext) {
6464
RootBeanDefinition annMappingDef = new RootBeanDefinition(DefaultAnnotationHandlerMapping.class);
6565
annMappingDef.setSource(source);
6666
annMappingDef.getPropertyValues().add("order", 0);
67+
annMappingDef.getPropertyValues().add("detectInterceptors", true);
6768
String annMappingName = parserContext.getReaderContext().registerWithGeneratedName(annMappingDef);
6869

6970
RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class);

org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/InterceptorsBeanDefinitionParser.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public class MvcNamespaceHandler extends NamespaceHandlerSupport {
2929

3030
public void init() {
3131
registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
32-
registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
3332
registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
3433
}
3534

org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public BeanDefinition parse(Element element, ParserContext parserContext) {
5353
handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class);
5454
handlerMappingDef.setSource(source);
5555
handlerMappingDef.getPropertyValues().add("order", "1");
56+
handlerMappingDef.getPropertyValues().add("detectInterceptors", true);
5657
this.handlerMappingBeanName = parserContext.getReaderContext().registerWithGeneratedName(handlerMappingDef);
5758
} else {
5859
handlerMappingDef = (RootBeanDefinition) parserContext.getReaderContext().getRegistry().getBeanDefinition(this.handlerMappingBeanName);

org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport
5757

5858
private HandlerInterceptor[] adaptedInterceptors;
5959

60+
private boolean detectInterceptors;
6061

6162
/**
6263
* Specify the order value for this HandlerMapping bean.
@@ -100,6 +101,15 @@ public void setInterceptors(Object[] interceptors) {
100101
this.interceptors.addAll(Arrays.asList(interceptors));
101102
}
102103

104+
/**
105+
* Configure whether this handler mapping should detect interceptors registered in the WebApplicationContext.
106+
* If true, {@link HandlerInterceptor} and {@link WebRequestInterceptor} beans will be detected by type and added to the interceptors list.
107+
* Default is false.
108+
* @param detectInterceptors the detect interceptors flag
109+
*/
110+
public void setDetectInterceptors(boolean detectInterceptors) {
111+
this.detectInterceptors = detectInterceptors;
112+
}
103113

104114
/**
105115
* Initializes the interceptors.
@@ -131,10 +141,17 @@ protected void extendInterceptors(List interceptors) {
131141
* @see #adaptInterceptor
132142
*/
133143
protected void initInterceptors() {
134-
// TODO consider impact on backwards compatibility here
135-
Map<String, HandlerInterceptor> globalInterceptors = getApplicationContext().getBeansOfType(HandlerInterceptor.class);
136-
if (globalInterceptors != null) {
137-
this.interceptors.addAll(globalInterceptors.values());
144+
if (this.detectInterceptors) {
145+
Map<String, HandlerInterceptor> handlerInterceptors = getApplicationContext().getBeansOfType(HandlerInterceptor.class);
146+
if (handlerInterceptors != null && !handlerInterceptors.isEmpty()) {
147+
this.interceptors.addAll(handlerInterceptors.values());
148+
}
149+
Map<String, WebRequestInterceptor> webInterceptors = getApplicationContext().getBeansOfType(WebRequestInterceptor.class);
150+
if (webInterceptors != null && !webInterceptors.isEmpty()) {
151+
for (WebRequestInterceptor interceptor : webInterceptors.values()) {
152+
this.interceptors.add(new WebRequestHandlerInterceptorAdapter(interceptor));
153+
}
154+
}
138155
}
139156

140157
if (!this.interceptors.isEmpty()) {

org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,12 @@
4848
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
4949
import org.springframework.web.bind.annotation.RequestMapping;
5050
import org.springframework.web.bind.annotation.RequestParam;
51+
import org.springframework.web.context.request.Log4jNestedDiagnosticContextInterceptor;
5152
import org.springframework.web.context.support.GenericWebApplicationContext;
5253
import org.springframework.web.servlet.HandlerExecutionChain;
5354
import org.springframework.web.servlet.ModelAndView;
5455
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
56+
import org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter;
5557
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
5658
import org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter;
5759
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
@@ -145,7 +147,7 @@ public void testCustomValidator() throws Exception {
145147
public void testInterceptors() throws Exception {
146148
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
147149
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-interceptors.xml", getClass()));
148-
assertEquals(6, container.getBeanDefinitionCount());
150+
assertEquals(7, container.getBeanDefinitionCount());
149151
container.refresh();
150152

151153
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
@@ -157,9 +159,10 @@ public void testInterceptors() throws Exception {
157159
request.addParameter("theme", "green");
158160

159161
HandlerExecutionChain chain = mapping.getHandler(request);
160-
assertEquals(3, chain.getInterceptors().length);
162+
assertEquals(4, chain.getInterceptors().length);
161163
assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
162164
assertTrue(chain.getInterceptors()[2] instanceof ThemeChangeInterceptor);
165+
assertTrue(chain.getInterceptors()[3] instanceof WebRequestHandlerInterceptorAdapter);
163166
}
164167

165168
@Test

org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-bean-decoration.xml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88

99
<mvc:annotation-driven />
1010

11-
<mvc:interceptors>
12-
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="lang" />
13-
</mvc:interceptors>
14-
15-
11+
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="lang" />
12+
1613
</beans>

org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-interceptors.xml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77

88
<mvc:annotation-driven />
99

10-
<mvc:interceptors>
11-
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
12-
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
13-
</mvc:interceptors>
14-
10+
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
11+
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
12+
<bean class="org.springframework.web.context.request.Log4jNestedDiagnosticContextInterceptor" />
13+
1514
</beans>

org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-controllers.xml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111

1212
<mvc:view-controller path="/bar" view-name="baz" />
1313

14-
<mvc:interceptors>
15-
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
16-
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
17-
</mvc:interceptors>
18-
14+
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
15+
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
16+
1917
</beans>

0 commit comments

Comments
 (0)