首先看一下HandlerInterceptor
它的接口文档!(HandlerInterceptorAdapter
仅是一个子类,如果您不想实现所有3个方法,则只能为您提供帮助)。
然后,您会注意到有3种方法,每种方法都属于“处理”链中的一个步骤。
然后您会注意到您使用了错误的方法:use postHandle
代替preHandle
。
然后,您会注意到在过滤器中创建的模型图ModelAndView mv = new ModelAndView();
未连接到某物,因此无法使用!但是幸运的是postHandle
有一个ModelAndView modelAndView
参数。而且,您必须使用它而不是创建未连接的模型图。
也许以后您会注意到您两次创建了过滤器。一次通过组件扫描,一次通过xml声明。(在这种情况下,我建议删除@Compnent
注释)
因此,最后您的课程如下所示:
public class testInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView){
modelAndView.addObject("name", "test name");
}
}
最后,您会注意到(我不是100%确信)未针对Spring安全性登录请求(j_spring_security_check)或注销调用此拦截器。因为这是在调用任何HandlerInterceptor之前应用的spring安全过滤器中处理的。
(评论)现在,当我调用登录页面时,我可以看到我的sysout评论,但它显示了16次,为什么呢?
可能是因为您正在通过控制器加载一些资源(图像,css,js)。