前言:本篇主要介绍SpringMVC的拦截器机制。
1. 自定义拦截器
Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。
public interface HandlerInterceptor { /** * 这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。 * 如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去 * 进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。 */ default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } /** * 这个方法在业务处理器处理完请求后,但是DispatcherServlet 向客户端返回响应前被调用 * 在该方法中对用户请求request进行处理。 */ default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } /** * 这个方法在 DispatcherServlet 完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。 */ default void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } }
2. 拦截器方法执行顺序
3. 配置拦截器
<mvc:interceptors> <!-- 配置自定义的拦截器. --> <bean class="com.wj.web.interceptors.FirstInterceptor"></bean> <!-- 配置拦截器的路径 --> <mvc:interceptor> <mvc:mapping path="/views/*"/> <!-- 配置拦截器(不)作用的路径 --> <mvc:exclude-mapping path="/views/getMap.action"/> <bean class="com.wj.web.interceptors.SecondInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
此拦截器的执行顺序为:
若第二个拦截器preHandle方法校验不通过,返回false,则拦截器的执行顺序为:
4. 拦截器实现
FirstInterceptor:
public class FirstInterceptor implements HandlerInterceptor{ /** * 该方法在目标方法之前被调用. * 若返回值为 true, 则继续调用后续的拦截器和目标方法. * 若返回值为 false, 则不会再调用后续的拦截器和目标方法. * * 可以考虑做权限. 日志, 事务等. */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("【FirstInterceptor】 preHandle"); return true; } /** * 调用目标方法之后, 但渲染视图之前. * 可以对请求域中的属性或视图做出修改. */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("【FirstInterceptor】 postHandle"); } /** * 渲染视图之后被调用. 释放资源 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("【FirstInterceptor】 afterCompletion"); } }
SecondInterceptor:
public class SecondInterceptor implements HandlerInterceptor{ /** * 该方法在目标方法之前被调用. * 若返回值为 true, 则继续调用后续的拦截器和目标方法. * 若返回值为 false, 则不会再调用后续的拦截器和目标方法. * * 可以考虑做权限. 日志, 事务等. */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("【SecondInterceptor】 preHandle"); return true; } /** * 调用目标方法之后, 但渲染视图之前. * 可以对请求域中的属性或视图做出修改. */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("【SecondInterceptor】 postHandle"); } /** * 渲染视图之后被调用. 释放资源 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("【SecondInterceptor】 afterCompletion"); } }
相关推荐
企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告
本篇文章主要介绍了防止SpringMVC拦截器拦截js等静态资源文件的解决方法,具有一定的参考价值,有兴趣的同学可以了解一下
SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi
NULL 博文链接:https://panyongzheng.iteye.com/blog/2084629
SpringMVC拦截器例子详解,
SpringMvc 拦截器 原理清楚,代码简单,值得学习!
springmvc 拦截器
自定义拦截器的具体实现、自定义拦截器的配置方式、多个拦截器之间的执行执行顺序
springmvc-机制(拦截器、aop、异常).pdfspringmvc-机制(拦截器、aop、异常).pdf
SpringMVC拦截器的使用,通俗易懂!
SpringMVC框架下对限定时间拦截(适用于初学者)
可下载部署直接运行
SpringMVC拦截器源代码
文档内有springmvc拦截器的配置
springMVC 拦截器源代码 内有详细文档介绍操作 @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { //可以通过...
springmvc拦截器实现登录验证
初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混,误以为OpenFeign拦截器就是SpringMVC拦截器:Spring MVC拦截器发生在客户端 和 服务端之间,在客户端向服务端发送请求时进行拦截处理。...
Springmvc框架进行登录验证,除了某些特定的action请求不需要登录验证,例如登录,注册等。其他的action请求均需要登录验证,若没有登录则直接调到登录界面。若登录成功,则通过拦截
SpringMVC学习(十二)——SpringMVC中的拦截器
NULL 博文链接:https://cdxs2.iteye.com/blog/1950517