首页>>后端>>Spring->从原理带你掌握Spring MVC拦截处理器知识

从原理带你掌握Spring MVC拦截处理器知识

时间:2023-11-30 本站 点击:0

1、工作原理流程图

2、Spring Web MVC 的处理器拦截器

HandlerInterceptor

类似Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

HandlerInterceptor接口定义了如下方法:

preHandle

该方法将在请求处理之前进行调用,只有当该方法返回true时,才会继续调用下一个Interceptor的preHandle(),如果已是最后一个Interceptor就会是调用当前请求的Controller

postHandle

该方法将在请求处理后,DispatcherServlet进行视图返回渲染之前进行调用,可以在这个方法中对Controller处理之后的ModelAndView对象进行操作(比如这里加入公用信息以便页面显示)

afterCompletion

该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行,用于资源清理

3、拦截器配置

3.1 针对某种mapping拦截器配置

<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><propertyname="interceptors"><list><refbean="handlerInterceptor1"/><refbean="handlerInterceptor2"/></list></property></bean><beanid="handlerInterceptor1"class="springmvc.intercapter.HandlerInterceptor1"/><beanid="handlerInterceptor2"class="springmvc.intercapter.HandlerInterceptor2"/>

3.2 针对所有mapping配置全局拦截器

<!--拦截器--><mvc:interceptors><!--多个拦截器,顺序执行--><mvc:interceptor><mvc:mappingpath="/**"/><beanclass="com.sss.filter.HandlerInterceptor1"></bean></mvc:interceptor><mvc:interceptor><mvc:mappingpath="/**"/><beanclass="com.sss.filter.HandlerInterceptor2"></bean></mvc:interceptor></mvc:interceptors>

4、实践

用户访问其他页面时,从Seesion中获取到用户,未登录则重定向到登录页面。

PublicclassLoginInterceptorimplementsHandlerInterceptor{@OverridePublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{//如果是登录页面则放行if(request.getRequestURI().indexOf("login.action")>=0){returntrue;}HttpSessionsession=request.getSession();//如果用户已登录也放行if(session.getAttribute("user")!=null){returntrue;}//用户没有登录挑战到登录页面request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);returnfalse;}

本文分享自华为云社区,作者:JavaEdge。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Spring/4445.html