当前位置:   article > 正文

SpringBoot自定义拦截器_pigx springboot

pigx springboot

目录

拦截器的定义以及作用

自定义拦截器

配置拦截器


拦截器的定义以及作用

拦截器通常通过动态代理的方式来执行。

拦截器的生命周期由IoC容器管理,可以通过注入等方式来获取其他Bean的实例,使用更方便。

拦截器的作用类似于Servlet 中的Filter,都可以用于对处理器进行预处理和后处理。在Spring MVC 与Spring Boot 中使用拦截器一般是实现HandlerInterceptor 接口。

将多个Controller中共有的代码放在拦截器中执行,从而减少controller中代码的冗余。

自定义拦截器

首先我们得明确拦截器得作用,以及在一些特定得业务场景下得使用,这里拿一种场景来举例,如需要对整个项目得请求做统一得拦截处理,对其某些特定得请求做特殊处理等,这个时候就需要做拦截器来处理这些问题。那么我们需要先自定义一个拦截器如下:

  1. package com.pig4cloud.pigx.wonders.common.conf;
  2. import com.pig4cloud.pigx.common.core.exception.InterceptorException;
  3. import com.pig4cloud.pigx.wonders.index.entity.TYdzfAppInfo;
  4. import com.pig4cloud.pigx.wonders.index.mapper.TYdzfAppInfoMapper;
  5. import org.apache.commons.lang.StringUtils;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.web.servlet.HandlerInterceptor;
  8. import org.springframework.web.servlet.ModelAndView;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. /**统一自定义拦截器
  12. * @author tonganzhou
  13. * @version 1.0
  14. * @date 2021/7/26 9:01
  15. */
  16. public class RequestInterceptor implements HandlerInterceptor {
  17. @Autowired
  18. TYdzfAppInfoMapper tYdzfAppInfoMapper;
  19. /**
  20. * Controller方法处理之前调用此方法
  21. * 链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行
  22. * 若返回false,则中断执行,注意:不会进入afterCompletion
  23. * @param request
  24. * @param response
  25. * @param handler
  26. * @return
  27. * @throws Exception
  28. */
  29. @Override
  30. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
  31. // 增加拦截逻辑 查询head头是否带version版本号
  32. String version=request.getHeader("version");
  33. if (StringUtils.isEmpty(version)){
  34. throw new InterceptorException("当前不是最新版本,请更新最新版本后再操作");
  35. }else{
  36. TYdzfAppInfo tYdzfAppInfo=tYdzfAppInfoMapper.getAppInfo();
  37. if (!"PC".equals(version)&&Integer.parseInt(version)<Integer.parseInt(tYdzfAppInfo.getAppCode())){
  38. throw new InterceptorException("当前不是最新版本,请更新最新版本后再操作");
  39. }
  40. }
  41. return true;
  42. }
  43. /**
  44. * preHandle返回true时才调用此方法
  45. * @param request
  46. * @param response
  47. * @param handler
  48. * @param modelAndView
  49. */
  50. @Override
  51. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView){
  52. }
  53. /**
  54. * preHandle返回true时才调用此方法
  55. * @param request
  56. * @param response
  57. * @param handler
  58. * @param ex
  59. */
  60. @Override
  61. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
  62. }
  63. }

需要明确得是定义一个拦截器一定要知道拦截器实现得这三个比较重要得方法得执行顺序,然后根据需要分别做逻辑处理来达到你想要的目的。

配置拦截器

配置拦截器是将我们的自定义拦截器通过配置工具来实例注册,同时还可以配置当前拦截器的一个作用范围等。继承WebMvcConfigurerAdapter 接口,重写其中的addInterceptors() 方法。调用registry.addInterceptor() 方法注册该拦截器。

  1. package com.pig4cloud.pigx.wonders.common.conf;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
  5. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  6. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  7. /**
  8. * 统一拦截器配置注册自定义拦截器
  9. * @author tonganzhou
  10. * @version 1.0
  11. * @date 2021/7/26 9:00
  12. */
  13. @Configuration
  14. public class WebConfig implements WebMvcConfigurer {
  15. @Bean
  16. public RequestInterceptor interceptorRequest () {
  17. return new RequestInterceptor();
  18. }
  19. @Override
  20. public void addInterceptors(InterceptorRegistry registry) {
  21. InterceptorRegistration registration = registry.addInterceptor(interceptorRequest());//指定拦截器实例
  22. registration.addPathPatterns("/**");//用来指定那些请求
  23. registration.excludePathPatterns(
  24. "/appInfo/getAppInfo"
  25. );//用来排除那些请求
  26. }
  27. }

注意:在springboot中拦截器的请求路径书写必须为/**

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/716451
推荐阅读
相关标签
  

闽ICP备14008679号