Spring MVC中的拦截器
我正在尝试在spring学习拦截器,但无法理解。我尝试了一个示例示例,但没有成功。我创建了一个简单的拦截器,例如
@Component("testInterceptor")
public class testInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
//I suppose this method will be called when I open my login page so just write something here
System.out.println("Inside Interceptor...");
ModelAndView mv = new ModelAndView();
mv.addObject("name", "test name");
return true;
}
}
在我的spring-servlet.xml中,我有
<context:component-scan base-package="com.test.interceptor" /> <mvc:interceptors> <bean class="com.test.interceptors.testInterceptor " /> </mvc:interceptors>
在登录页面上,我在$ {name}处写上
因此,我什至都看不到$ {name}的值或sysout。
我什至无法理解何时将调用postHandler或afterCompletion方法,以及在实现之前如何测试它们。这可能是因为我对spring也很陌生,但我无法完全理解。如果您建议阅读一个很好的链接(其中显示了一些示例),那将对您有很大的帮助。
提前致谢
编辑:现在,当我调用登录页面时,我可以看到我的sysout commnet,但是它将显示16次,为什么呢?
-
首先看一下
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)。
-
Spring MVC拦截器映射问题
2021-02-02 关注 0 浏览80 1答案
-
如何在Spring MVC拦截器中验证会话
2021-02-02 关注 0 浏览165 1答案
-
Spring 3 MVC @Controller与AOP拦截器?
2021-02-02 关注 0 浏览131 1答案
-
Spring MVC处理程序拦截器未运行
2021-02-02 关注 0 浏览84 1答案
-
Spring MVC 3:拦截器返回错误的视图
2021-02-02 关注 0 浏览82 1答案
-
Spring MVC从拦截器获取映射控制器方法
2021-02-02 关注 0 浏览173 1答案
-
如何使用Spring MVC拦截器更改发布的值
2021-02-02 关注 0 浏览95 1答案
-
如何在Spring MVC 3.0中注册处理程序拦截器?
2021-01-30 关注 0 浏览129 1答案
-
如何在Spring MVC 3.0中注册处理程序拦截器?
2021-02-02 关注 0 浏览107 1答案
-
是否可以使用注释连接Spring MVC拦截器?
2021-02-02 关注 0 浏览90 1答案