10.9、spring boot的web应用——拦截器的应用
来源:互联网 发布:js获取当前城市名称 编辑:程序博客网 时间:2024/05/21 22:33
拦截器会在controller层响应前端响应之前先拦截请求,对请求做处理,然后再由controller层进行响应,就是在前端和后台响应之间加了一次拦截请求。实现拦截器需要实现HandlerInterceptor接口,并且实现接口中的preHandle、postHandle和afterCompletion三个方法。当拦截器拦截到请求后,
- preHandle:在controller层响应之前执行;
- postHandle:在contrller层响应请求后执行,但是在页面渲染之前执行;
- afterCompletion:一般在页面渲染之后调用,用于清理资源
实现拦截器后并不会自动发挥功能,需要写一个配置类,把拦截器加进来。配置类要继承WebMvcConfigurerAdapter抽象类,并重写addInterceptors方法,在addInterceptors方法中加入拦截器。
示例如下
1、建立一个MyHandlerInterceptor拦截器
package com.lzj.spring.boot.config;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class MyHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("-----preHandle-----"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("-----postHandle-----"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("-----afterCompletion-----"); }}
2、建立MyWebMvcConfigAdpter拦截器配置类,用于配置拦截器
package com.lzj.spring.boot.config;import org.springframework.boot.SpringBootConfiguration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*也可以用@Configuration注解标识 */@SpringBootConfigurationpublic class MyWebMvcConfigAdpter extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { /*把定义的拦截器加入到容器中*/ registry.addInterceptor(new MyHandlerInterceptor()); }}
3、定义controller层,用于响应前端请求
@RestControllerpublic class MyController { @RequestMapping("/hello") public String hello(){ System.out.println("-----hello()-----"); return "hello world"; }}
4、spring boot的启动类
package com.lzj.spring.boot.start;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/*用scanBasePackages定义扫描容器的范围,因为启动类和监听器的配置类不在一个包下面,所以需要制定扫描范围,否则找不到*/@SpringBootApplication(scanBasePackages="com.lzj.spring.boot.config")public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }}
运行启动类,浏览器中输入http://localhost:8080/hello请求后,Console中输出内容如下:
-----preHandle----------hello()----------postHandle----------afterCompletion-----
从输出结果可以看出,先执行的拦截器的preHandle()方法,然后执行的Controller层的hello()的方法,然后有执行的拦截器的postHandle()的方法,最后执行的拦截器的afterCompletion()清理方法。
阅读全文
0 0
- 10.9、spring boot的web应用——拦截器的应用
- 10.6、spring boot的web应用——@ModelAttribute应用
- 10.5、spring boot的web应用——更改服务器
- Spring Boot Web应用的异常处理
- 10.2、spring boot的web应用——@RestController的应用
- 10.8、spring boot的web应用——servlet、listener、filter的应用
- 10.1、spring boot在web中的应用——@ResponseBody的应用
- cxf+Spring的webservice应用--拦截器
- spring-mvc 的 拦截器应用例子
- 10.3、spring boot的web应用——支持jsp视图
- 10.4、spring boot的web应用——支持freemarker模板视图
- 10.7、spring boot的web应用——访问静态资源
- Spring Boot ---- 快速开发web应用的神器
- Spring Boot中Web应用的统一异常处理
- Spring Boot中Web应用的统一异常处理
- Spring Boot中Web应用的统一异常处理
- Spring Boot中Web应用的统一异常处理
- Spring Boot中Web应用的统一异常处理
- 2017年浙江工业大学大学生程序设计迎新赛决赛—网络同步赛 G-取数游戏(区间dp)
- 剑指Offer---正则表达式匹配
- C语言中的typedef struct用法
- 最高 3.9 GHz CPU 时脉、Vega M 图形核心 Intel Core i7-8709G 处理器资料曝光
- Oracle rownum的理解以及rownum分组出现重复数据的解决方法
- 10.9、spring boot的web应用——拦截器的应用
- 经典算法之非递归算法实现二叉树前、中、后序遍历
- Hdoj 1715 大菲波数
- UDP
- calico deep dive
- mybatis插件
- 【学习】——执行力
- Spring基于xml的构造方法注入&setter注入
- mybatis学习参考