我有一个配置类,它扩展WebMvcConfigurationSupport
和我已经加入拦截器是这样的:拦截器用于与Java配置不存在请求映射
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor()).addPathPatterns("/api/**");
}
其中myInterceptor()
是:
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}
和它的工作原理罚款的任何映射(/api/**
),我已经实施例如/api/sample
- 从MyInterceptor preHandle被解雇(我有一个控制器与映射/api/sample
)。
当我打电话不存在资源例如/api/forward/sample
从MyInterceptor preHandle永远不会被调用。
请注意它的工作时,我曾在配置XML,像预期:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/api/**" />
<bean class="my.pack.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
出于某种原因,与Java的配置要求为不存在的映射不会拦截。为什么配置不等效?我认为它应该是。
编辑:
多一点的调试信息。使用XML配置DispatcherServlet#handlerMappings
包含5个处理:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
org.springframework.web.socket.server.support.WebSocketHandlerMapping
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.security.oauth2.provider.endpoint.FrameworkEndpointHandlerMapping
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
与Java配置中,包含7个处理器:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
org.springframework.web.socket.server.support.WebSocketHandlerMapping
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.security.oauth2.provider.endpoint.FrameworkEndpointHandlerMapping
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
这个问题似乎是与SimpleUrlHandlerMapping
(至少它似乎是用于我所说的资源 - api/forward/sample
,而api/sample
RequestMappingHandlerMapping
正在使用中),在基于Java的配置的情况下,它具有空的已采用的接受器。
编辑2:
作为样品施加完整的源代码(I试图使它尽可能小只是为了演示的效果): https://github.com/szprutamich/spring-demo
在ConfigurationBase
类 - 构型可以切换从基于xml的到基于静态字段的java CONFIG
。
与基于XML配置两个URL工作:
/api/sample
/api/forward/sample
与Java配置着不起作用。
你可以分享传递的URL和相关的web.xml片段吗? – VinPro
请检查我最后的编辑。让我知道你是否需要知道其他事情。 – maszter