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

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

1、编写拦截器实现类,此类必须实现接口   HandlerInterceptor,然后重写里面需要的三个比较常用的方法,实现自己的业务逻辑代码

如:OneInterceptor

1 package com.leecx.interceptors.interceptor; 2  3  4 import com.leecx.pojo.LeeJSONResult; 5 import com.leecx.utils.JsonUtils; 6 import org.springframework.web.servlet.HandlerInterceptor; 7 import org.springframework.web.servlet.ModelAndView; 8  9 import javax.servlet.http.HttpServletRequest;10 import javax.servlet.http.HttpServletResponse;11 import java.io.IOException;12 import java.io.OutputStream;13 import java.io.UnsupportedEncodingException;14 15 public class OneInterceptor implements HandlerInterceptor{16 17     /**18      * 在请求处理之前进行调用(Controller方法调用之前)19      */20     @Override21     public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {22 23         System.out.println("=====================");24         if (true) {25             returnErrorResponse(httpServletResponse, LeeJSONResult.errorMsg("被one拦截..."));26         }27 28         System.out.println("被one拦截...");29 30         return false;31     }32 33     /**34      * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)35      */36     @Override37     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {38 39     }40 41     /**42      * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)43      */44     @Override45     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {46 47     }48 49     public void returnErrorResponse(HttpServletResponse response, LeeJSONResult result) throws IOException, UnsupportedEncodingException {50         OutputStream out = null;51         try{52             response.setCharacterEncoding("utf-8");53             response.setContentType("text/json");54             out = response.getOutputStream();55             out.write(JsonUtils.objectToJson(result).getBytes("utf-8"));56             out.flush();57         } finally{58             if(out!=null){59                 out.close();60             }61         }62     }63 }

说明:

1、preHandle  方法会在请求处理之前进行调用(Controller方法调用之前)

2、postHandle  请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)

3、afterCompletion  在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)

2、编写拦截器配置文件主类 WebMvcConfigurer  此类必须继承  WebMvcConfigurerAdapter 类,并重写其中的方法  addInterceptors   并且在主类上加上注解  @Configuration    

如:WebMvcConfigurer

1 package com.leecx.interceptors.config; 2  3 import com.leecx.interceptors.interceptor.OneInterceptor; 4 import com.leecx.interceptors.interceptor.TwoInterceptor; 5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 7 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 8  9 @Configuration10 public class WebMvcConfigurer extends WebMvcConfigurerAdapter{11 12     /**13      * 

Title:

14 *

Description:重写增加自定义拦截器的注册,某一个拦截器需要先注册进来,才能工作

15 * param[1]: null16 * return:17 * exception:18 * date:2018/4/18 0018 下午 17:2919 * author:段美林[duanml@neusoft.com]20 */21 @Override22 public void addInterceptors(InterceptorRegistry registry) {23 24 registry.addInterceptor(new OneInterceptor()).addPathPatterns("/one/**");25 26 registry.addInterceptor(new TwoInterceptor()).addPathPatterns("/one/**")27 .addPathPatterns("/two/**");28 29 super.addInterceptors(registry);30 }31 }

说明:

   拦截器的执行是会根据 registry 注入的先后顺序执行,比如:/one/**   同时被  OneInterceptor、TwoInterceptor 拦截,但会先执行 OneInterceptor拦截的业务请求,因为它先注入进来的

 

3、在controller业务层,只要请求的地址为  拦截器 申明的需要拦截地址即可进入相应的业务处理。

如:OneInterceptorController    这个controller 类的所有实现方法都会被 拦截器  OneInterceptor   所拦截到。

1 package com.leecx.controller; 2  3 import java.util.ArrayList; 4 import java.util.Date; 5 import java.util.List; 6  7 import org.springframework.stereotype.Controller; 8 import org.springframework.ui.ModelMap; 9 import org.springframework.web.bind.annotation.PostMapping;10 import org.springframework.web.bind.annotation.RequestMapping;11 12 import com.leecx.pojo.User;13 14 @Controller15 @RequestMapping("/one")16 public class OneInterceptorController {17 18     @RequestMapping("/index")19     public String index(ModelMap map) {20         System.out.println("=========one is  index");21         map.addAttribute("name", "itzixi22");22         return "thymeleaf/index";23     }24     25     @RequestMapping("center")26     public String center() {27         return "thymeleaf/center/center";28     }29 30     @RequestMapping("test")31     public String test(ModelMap map) {32         33         User user = new User();34         user.setAge(18);35         user.setName("manager");36         user.setPassword("123456");37         user.setBirthday(new Date());38         39         map.addAttribute("user", user);40         41         42         User u1 = new User();43         u1.setAge(19);44         u1.setName("itzixi");45         u1.setPassword("123456");46         u1.setBirthday(new Date());47         48         User u2 = new User();49         u2.setAge(17);50         u2.setName("LeeCX");51         u2.setPassword("123456");52         u2.setBirthday(new Date());53         54         List
userList = new ArrayList<>();55 userList.add(user);56 userList.add(u1);57 userList.add(u2);58 59 map.addAttribute("userList", userList);60 61 return "thymeleaf/test";62 }63 64 @PostMapping("postform")65 public String postform(User user) {66 System.out.println(user.getName());67 return "redirect:/th/test";68 }69 }

 

转载于:https://www.cnblogs.com/yinfengjiujian/p/8876781.html

你可能感兴趣的文章
P2590 [ZJOI2008]树的统计
查看>>
09:矩阵乘法
查看>>
【第一周】进度条
查看>>
Hibernate 异常:“@OneToOne or @ManyToOne on XXX references an unknown entity: XXX”
查看>>
Activity之多启动图标
查看>>
UVa 11825 (状压DP) Hackers' Crackdown
查看>>
http://localhost:8080/默认访问root项目
查看>>
pseudo-class与pseudo-element的不同点与相同点
查看>>
怎么在SQL查询的结果里加行号?
查看>>
hdu1400Mondriaan's Dream
查看>>
数学题
查看>>
ios IAP 内购验证
查看>>
Linux 各个版本之间的差别
查看>>
urlparse模块
查看>>
M2Mqtt is a MQTT client available for all .Net platform
查看>>
关于ZedGraph几个难点
查看>>
Android Timer 的 schedule()方法定时循环切换图片
查看>>
poj1734 Sightseeing trip【最小环】
查看>>
非参贝叶斯(Bayesian Non-parameter)初步
查看>>
适度平衡树
查看>>