web拦截器作用有权限控制,日志记录等等。SpringBoot 提供 HandlerInterceptor方便我们开发;
我们定义一个自定义拦截器 实现HandlerInterceptor接口,实现三个方法,preHandle是 请求处理之前调用,postHandle是请求处理之后并且视图渲染之前调用,afterCompletion请求结束之后并且视图渲染之后调用;
package com.java1234.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /** * 自定义拦截器 * @author Administrator * */ public class MyInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("========MyInterceptor preHandle 请求处理之前调用================="); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("========MyInterceptor postHandle 请求处理之后并且视图渲染之前调用================="); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("========MyInterceptor afterCompletion 请求结束之后并且视图渲染之后调用================="); } }
我们再定义一个类继承WebMvcConfigurerAdapter,重写addInterceptors,我们把自定义拦截器添加到拦截器链中去。
package com.java1234.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.java1234.interceptor.MyInterceptor; @Configuration public class MyWebAppConfigurer extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**"); // 添加拦截器 以及 拦截器规则 super.addInterceptors(registry); } }
简单搞个控制器类测试下;
package com.java1234.action; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * 用户Controller * @author Administrator * */ @Controller @RequestMapping(value = "/user") public class UserController { @ResponseBody @RequestMapping(value = "/login") public String login(){ System.out.println("login"); return "测试拦截器"; } }
项目配置文件配置下:
server: port: 80 context-path: /
启动项目,运行 http://localhost/user/login
执行结果如下:
========MyInterceptor preHandle 请求处理之前调用=================
login
========MyInterceptor postHandle 请求处理之后并且视图渲染之前调用=================
========MyInterceptor afterCompletion 请求结束之后并且视图渲染之后调用=================
测试代码:
链接:https://pan.baidu.com/s/1iFDk37zpoAZcR5dbancAXw 密码:xi0s
上一篇:谷歌浏览器无痕迹测试设置
下一篇:SpringCloud简介