SpringBoot 拦截器(Interceptor)的使用

news/2024/12/22 18:26:17/

拦截器intercprot  和 过滤器 Filter 其实作用类似

在最开始接触java 使用struts2的时候,里面都是filter

后来springmvc时就用interceptor

没太在意过区别,反正就是起检查作用的,

仔细阅读 过滤器(filter)和拦截器(interceptor)的区别 后明白了不少

最重要的要记住他们的执行顺序: 先filter 后 interceptor

过滤前-拦截前-action执行-拦截后-过滤后

 

在了解上面的信息后,本文讲interceptor的使用

自己定义的interceptor都需要继承HandlerInterceptor 并实现对应方法preHandle   postHandle来实现拦截功能

同时需要根据拦截规则进行注册

实例如下:

复制代码
package com.xiao.config;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import com.alibaba.fastjson.JSON;
import com.xiao.common.result.Error;
import com.xiao.common.result.Result;@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {@Beanpublic InterfaceAuthCheckInterceptor getInterfaceAuthCheckInterceptor() {return new InterfaceAuthCheckInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 多个拦截器组成一个拦截器链// addPathPatterns 用于添加拦截规则// excludePathPatterns 用户排除拦截registry.addInterceptor(getInterfaceAuthCheckInterceptor()).addPathPatterns("/api/**");// registry.addInterceptor(new InterfaceAuthCheckInterceptor()).addPathPatterns("/api/**");// 如果interceptor中不注入redis或其他项目可以直接new,否则请使用上面这种方式super.addInterceptors(registry);}/*** 微服务间接口访问密钥验证* @author xiaochangwei**/class InterfaceAuthCheckInterceptor implements HandlerInterceptor {private Logger logger = LoggerFactory.getLogger(getClass());@AutowiredStringRedisTemplate stringRedisTemplate;@Overridepublic void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj)throws Exception {String key = request.getParameter("key");if (StringUtils.isEmpty(key)) {response.setContentType("application/json;charset=utf-8");response.getWriter().write(JSON.toJSONString(new Result(Error.INCOMPLETE_API_AUTHEN_INFO.getCode(), Error.INCOMPLETE_API_AUTHEN_INFO.getMessage())));return false;} else {logger.info("test redis import :" + stringRedisTemplate.opsForValue().get(key));// TODO 验证逻辑return true;}}}
}
复制代码

其中要注意注册时的区别

registry.addInterceptor(getInterfaceAuthCheckInterceptor()).addPathPatterns("/api/**"); 这种方式无论什么情况都可以

registry.addInterceptor(new InterfaceAuthCheckInterceptor()).addPathPatterns("/api/**");这种情况时,自定义的interceptor中不能注入其他内容,比如redis或者其他service,如果要注入,必须使用上面这种方法

http://www.ppmy.cn/news/667468.html

相关文章

java自定义拦截所有请求_Java实现拦截HTTP请求的几种方式

在Java的服务端开发当中,拦截器是很常见的业务场景,这里对Java开发当中几种常见的拦截器的实现方式进行记录和分析。案例说明基于Spring Boot环境。 一:实现javax.servlet.Filter接口(使用过滤器方式拦截请求) import org.springframework.stereotype.Component; import jav…

mybatisplus拦截器处理处理sql

场景 在项目中,会出现一些对sql处理的需求,如果sql操作很多,为了简化处理,可以在sql执行的时候加入一个拦截器,并对将要执行的sql进行统一的处理。 这里已使用了mybatisplus客户端为例的实现方式。 代码实现 maven…

Android拦截陌生号码,安卓手机应该如何设置拦截陌生号码

打开“手机管家”,“骚扰拦截”,点击“设置”,开启骚扰拦截,点击“拦截规则”,开启需要拦截的类型即可、打开手机2113,点击【电话】标志。52612、点击4102右下角‘三个点’标1653志,在点击【内骚…

dio拦截器 flutter_Flutter 中 Dio 拦截器

有时我们不需要复杂的应用程序,只需要显示一个数据列表的简单功能,我们可以通过一个简单的方法来实现: Future fetchItems() {return Dio().("https://some-website.com/listing"); } 复制代码 没有任何错误,也不用用log打印任何响应信息。 但是事实是,几乎没有…

自定义注解+拦截器优化项目代码

自定义注解拦截器的优势 类似用户权限或者接口限流的需求,但并不是所有操作或者接口需要。可以使用过滤器或者拦截器,但这样就必须在配置文件里加上所有方法或者使用通配符。 所以可以采用一种比较简单灵活的方式:采用自定义注解加Spring拦截…

Vue + Spring Boot 项目实战(六):前端路由与登录拦截器

本篇目录 前言一、前端路由二、使用 History 模式三、后端登录拦截器1.LoginController2.LoginInterceptor3.WebConfigurer4.效果检验 四、Vuex 与前端登录拦截器1.引入 Vuex2.修改路由配置3.使用钩子函数判断是否拦截4.修改 Login.vue5.效果检验 前言 这一篇主要讲前端路由与…

Springboot 拦截器链 - 加载拦截器

Springboot 拦截器链 - 加载拦截器 1.创建拦截器 // 创建拦截器需要实现 HandlerInterceptor 接口 @Slf4j public class HandleInterceptorImpl implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,…

java拦截器没有生效_拦截器不生效

解决思路: 1、SpringMVC springMVC容器中需要添加相关配置,其中的 authenticationInterceptor就是目标拦截器 2、SpringBoot SpringBoot中的就需要区分是1.X还是2.X这个里面是有说法的,可以去网上百度 通过@Configuration注解将拦截器配置实现,这个只是其中一种方式; @Con…