我目前使用的拦截器是这样配置的 xml :
<mvc:interceptors>
<bean class="org.resthub.dashboard.BasicInterceptor" />
</mvc:interceptors>
但我想把它放在我的配置类中:
@Configuration
@ComponentScan("org.resthub.dashboard")
@EnableWebMvc
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class WebAppConfig extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new BasicInterceptor());
}
@Bean
public InternalResourceViewResolver setupViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
但它不起作用,我不知道为什么。永远不会调用拦截器。
有什么想法吗?
谢谢
edit
:这里是 BasicInterceptor
package org.resthub.dashboard;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class BasicInterceptor extends HandlerInterceptorAdapter {
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
super.postHandle(request, response, handler, modelAndView);
System.out.println("INTERCEPTORORRR§§§§§§");
if (modelAndView != null && modelAndView.getModelMap() != null) {
...
}
}
}
最佳答案
看起来你的配置是正确的,至少如果你已经确认它确实被拾取了。但是,问题可能是在请求期间发生某些事情导致 postHandle
不被执行。确保在请求执行期间没有抛出异常。并且要验证是否确实使用了拦截器,您可以实现 preHandle
或 afterCompletion
并查看是否执行了这些方法。
关于java - Spring 拦截器适用于 xml 但不适用于配置类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16081861/