博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot拦截器
阅读量:7099 次
发布时间:2019-06-28

本文共 4881 字,大约阅读时间需要 16 分钟。

在实际开发中,总存在着这样的场景,比如拦截请求的ip地址,或者在所有的请求都返回相同的数据,如果每一个方法都写出相同数据固然可以实现,但是随着项目的变大,重复的代码会越来越多,所以在这种情况我们可以用拦截器来实现。

最近一直在研究thymeleaf,越发的感觉这个很好用,所以这篇文章也选择结合这个来使用。

新建项目,pom文件如下:

4.0.0
com.dalaoyang
springboot_interceptor
0.0.1-SNAPSHOT
jar
springboot_interceptor
springboot_interceptor
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
org.springframework.boot
spring-boot-starter-test
test
net.sourceforge.nekohtml
nekohtml
1.9.15
org.springframework.boot
spring-boot-maven-plugin

新建一个拦截器CommonInterceptor,继承HandlerInterceptorAdapter。给大家说一下,在继承HandlerInterceptorAdapter有三个拦截器是经常使用的:

1.preHandle在业务处理器处理请求之前被调用
2.postHandle在业务处理器处理请求执行完成后,生成视图之前执行
3.afterCompletion在DispatcherServlet完全处理完请求后被调用

本文使用的是postHandle,代码如下:

package com.dalaoyang.interceptor;import org.apache.log4j.Logger;import org.springframework.stereotype.Component;import org.springframework.ui.ModelMap;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @author dalaoyang * @Description * @project springboot_learn * @package com.dalaoyang.interceptor * @email yangyang@dalaoyang.cn * @date 2018/4/27 */@Componentpublic class CommonInterceptor extends HandlerInterceptorAdapter {    Logger logger = Logger.getLogger(CommonInterceptor.class);    //preHandle在业务处理器处理请求之前被调用,    //postHandle在业务处理器处理请求执行完成后,生成视图之前执行    //afterCompletion在DispatcherServlet完全处理完请求后被调用    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,                           ModelAndView modelAndView) throws Exception {        logger.info("请求ip:"+request.getRemoteAddr());        logger.info("请求的方法:"+request.getMethod());        ModelMap modelMap = modelAndView.getModelMap();        modelMap.addAttribute("title","dalaoyang");    }}

在启动类继承WebMvcConfigurerAdapter来为项目添加拦截器,代码如下:

package com.dalaoyang;import com.dalaoyang.interceptor.CommonInterceptor;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@SpringBootApplicationpublic class SpringbootInterceptorApplication extends WebMvcConfigurerAdapter {    public static void main(String[] args) {        SpringApplication.run(SpringbootInterceptorApplication.class, args);    }    @Autowired    CommonInterceptor commonInterceptor;    // 增加拦截器    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(commonInterceptor);    }}

IndexController负责跳转,代码如下:

package com.dalaoyang.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;/** * @author dalaoyang * @Description * @project springboot_learn * @package com.dalaaoyang.controller * @email yangyang@dalaoyang.cn * @date 2018/4/27 */@Controllerpublic class IndexController {    @RequestMapping("/")    public String index(Model model){        model.addAttribute("content","hi , dalaoyang !");        return "index";    }}

在templates下新建index.html,其中content是controller返回的内容,title是在拦截器中返回的内容,代码如下:

    

启动项目,访问,控制台如下:

9953332-98985b5b9fb0ffd3
image

在看一下页面:

9953332-37f4d2d1b98ceb53
image

源码下载 :

个人网站:

转载地址:http://iveql.baihongyu.com/

你可能感兴趣的文章
JQuery中 JSON 兼容性问题(针对ie8)
查看>>
openstack知识---hypervisor
查看>>
1.1 python 安装(Windows)
查看>>
redis分布式锁的具体应用
查看>>
四中居中方法
查看>>
23. Merge K Sorted Lists (Java, 归并排序的思路)
查看>>
转载:JAR包介绍大全用途作用详解JAVA
查看>>
java 操作符(翻译自Java Tutorials)
查看>>
hive实例讲解实现in和not in子句
查看>>
java 线程池
查看>>
element-ui的el-tabel组件怎么使用type=“expand”实现表格嵌套并且在子表格没有数据的时候隐藏展开按钮...
查看>>
SlickUpload使用(一)
查看>>
oracle中向timeStamp类型字段插入当前时间
查看>>
剑指offer第八天
查看>>
HTMLcanvas矩形阵雨 - 学习笔记
查看>>
如何用代码分别获得个十百千位上的数值
查看>>
(六)文件操作
查看>>
2015.01.15 学前端 搞论文提交
查看>>
摇滚吧HTML5!有声前端交互!(一)
查看>>
CentOS7 jdk配置
查看>>