gpt4 book ai didi

spring - spring MVC中的拦截器

转载 作者:行者123 更新时间:2023-12-03 20:22:20 25 4
gpt4 key购买 nike

我正在尝试在 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 种方法,每一种都属于“处理”链中的一个步骤。

然后你会发现你用错了方法:使用postHandle而不是 preHandle .

然后您会注意到您在过滤器中创建的模型图 ModelAndView mv = new ModelAndView();没有连接到某物,因此它无法工作!不过还好postHandle有一个 ModelAndView modelAndView范围。并且您必须使用它而不是创建未连接的模型映射。

也许稍后您会注意到您创建了两次过滤器。一次通过组件扫描,一次通过 xml 声明。 (在这种情况下,我建议删除 @Compnent 注释)

所以最后你的类(class)看起来像:

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 安全过滤器中处理的。

(comment) Now I can see my sysout comment when I call my login page but it is displaying it 16 times why is this so?



也许是因为您正在通过 Controller 加载一些资源(图像、css、js)。

关于spring - spring MVC中的拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com