Spring Boot 添加拦截器

2023-11-11

Spring Boot 添加拦截器

介绍一下在Spring Boot 2.0.0以上版本如何添加拦截器


方法1

新增拦截器

新增拦截器,并打印请求URI。

@Component
public class SecurityInterceptor implements HandlerInterceptor {

    private static final Logger logger = LoggerFactory.getLogger(SecurityInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String url = request.getRequestURI();
        logger.info("url : " + url);
        return true;
    }
}

配置拦截器

Spring Boot 2.0+以上WebMvcConfigurerAdapter 过时,我们采用WebMvcConfigurer替代,配置后让拦截器生效。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    private static final Logger logger = LoggerFactory.getLogger(SecurityInterceptor.class);

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 配置拦截器
        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/**");
    }
}

方法2

新增拦截器

@Slf4j
@Component
public class MyInterceptor  implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	System.out.println("输出URI:"+request.getRequestURI());
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
}

配置拦截器

@Configuration
public class AbcConfgiurer extends WebMvcConfigurationSupport {

    /** 解决跨域问题 **/
    @Override
    public void addCorsMappings(CorsRegistry registry){
        registry.addMapping("/**")
        // 设置允许跨域请求的域名
        .allowedOrigins("*")
        // 是否允许证书
        .allowCredentials(true)
        // 设置允许的方法
        .allowedMethods("GET", "POST", "DELETE", "PUT")
        // 设置允许的header属性
        .allowedHeaders("*")
        // 跨域允许时间
        .maxAge(3600);
        super.addCorsMappings(registry);
    }

    /** 添加拦截器 **/
    @Override
    protected void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new MyInterceptor());
        // 拦截器2
        // 拦截器3
        // 拦截器4
        super.addInterceptors(registry);
    }
}

拦截所有响应


@Slf4j
@ControllerAdvice
public class MyResponseBodyAdvice  implements ResponseBodyAdvice<Object> {

    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                                  Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
                                  ServerHttpResponse response) {
        String requestPath = request.getURI().getPath();
        System.out.println("requestPath:" + requestPath);
        System.out.println(body);
        if(requestPath.equals("/targetMenu")) {
            // 判断响应值是什么类型
            if(body instanceof ArrayList) {
                List<String> resultStringList = (List<String>) body;
                for(String s : resultStringList) {
                    System.out.println(s;
                }
                // 拿到这次请求的参数
                Object myParam = ((ServletServerHttpRequest) request).getServletRequest().getAttribute("requestParam");
                log.info("parameter:{}", myParam);
            }
        }
        return body;
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 添加拦截器 的相关文章

随机推荐

  • Element UI 的输入框

    Input 输入框 通过鼠标或键盘输入字符 Input el input 为受控组件 它总会显示 Vue 绑定值 通常情况下 应当处理 input 事件 并更新组件的绑定值 或使用v model 否则 输入框内显示的值将不会改变 不支持 v
  • css line-height小酌

    1 行高的实际应用 1 1 一个空的div 打开浏览器看什么都会没有 给他嵌套个字体啊 就能撑开啊 好 兄弟来 试试看看行不行 div line height 0 background f00 或 div font size 0 backg
  • CTF系列之Web——SQL注入

    前言 在刚学习SQL注入的过程中非常艰难 查资料的时间有一周这么长 点开的网页也不下一千 认真读的也最少有两百 可是能引导入门的真的没几篇 都是复制来复制去的 没意思 感觉就是在浪费时间 有很多知识点都很散 很少能考到一片吧所有知识点总结在
  • Hutool-core 核心------cn.hutool.core.bean包下的DynaBean、BeanDesc、BeanDesc.PropDesc、BeanPath、BeanUtil、

    1 DynaBean 动态Bean 封装实例对象 进行反射调用 2 BeanDesc Bean信息描述做为BeanInfo替代方案 3 BeanDesc PropDesc 属性描述 4 BeanPath Bean路径表达式对象 用于属性检
  • FPGA面试真题解析(2)

    5 下面哪种不是组合逻辑电路功能描述方法 硬件逻辑实习岗 A 真值表 B 布尔方程 C 状态机 D 逻辑框图 解析 考察数字电路中对组合逻辑电路的认识 A选项真值表是使用于逻辑中的一类数学用表 用来计算逻辑表示式在每种论证 即每种逻辑变量取
  • C++学习--cin不支持录入空格

    https blog csdn net EXLsunshine article details 28440629 举个栗子 当使用cin功能然后键盘输入 aaa bbb ccc 时 cin的那个字符串只会保留 aaa
  • Apache解析漏洞

    Apache解析漏洞主要是因为Apache默认一个文件可以有多个用 分割得后缀 当最右边的后缀无法识别 mime types文件中的为合法后缀 则继续向左看 直到碰到合法后缀才进行解析 以最后一个合法后缀为准 1 如图 最后一个后缀名为 x
  • IPC:消息队列

    消息队列 gcc messageQueue c o mq lrt mqd t mq send mqd t mqdes const char msg ptr size t msg len unsigned msg prio msg prio
  • OpenCV 实现读取摄像头、视频读取保存 (C++)

    一 读取摄像头 重点语句 VideoCapture imshow 原理 使用VideoCapture语句读取摄像头 再利用while一次次将VideoCapture所读取的数据利用imshow语句一帧帧地读取出来 include
  • 基于多任务学习和GCN的交通路网出租车需求预测

    1 文章信息 文章题目为 Multitask Learning and GCN Based Taxi Demand Prediction for a Traffic Road Network 是一篇发表在Sensors期刊上的有关基于多任务
  • 解决vista和win10在windows服务中交互桌面权限问题:穿透Session 0 隔离

    服务 Service 对于大家来说一定不会陌生 它是Windows 操作系统重要的组成部分 我们可以把服务想像成一种特殊的应用程序 它随系统的 开启 关闭 而 开始 停止 其工作内容 在这期间无需任何用户参与 Windows 服务在后台执行
  • python数据分析面试_python数据分析面试

    1 如何利用SciKit包训练一个简单的线性回归模型 利用linear model LinearRegression 函数 Create linear regression object regr linear model LinearRe
  • vs code配置c语音环境

    要在VS Code中配置C语言环境 您可以按照以下步骤进行操作 安装C C 扩展程序 在VS Code中 您可以通过搜索 C C 来找到C C 扩展程序 安装该扩展程序后 您可以在VS Code中使用C C 语言编写代码 创建C C 项目
  • C++入门-----拷贝构造

    学习目标 1 拷贝构造函数的概念及使用 2 特征 3 注意的点 3 1 防止无穷递归 3 2 防止原对象被修改 4 默认生成拷贝构造 4 1 浅拷贝 4 2 为什么要自己实现拷贝构造函数 4 3 其对于内置类型和自定义类型的处理方式 5 总
  • vue响应式数据-修改对象的属性值,视图不更新

    目录 bug复现 原因 怎么在console中判断是不是响应式数据 怎样才能设置为响应式数据 bug复现 在代码中给一个对象 新增多个属性并赋值 然后在另一个方法中修改对象其中一个属性的值 发现数据改变 页面视图并没有更新 data ret
  • 在Vue.js的public目录下的index.html文件中,可以使用EJS(Embedded JavaScript)模板语法来插入变量。

    这个示例中 和被用于插入对应的变量 这些变量将被EJS模板引擎根据环境和配置进行替换 同样 会将htmlWebpackPlugin插件的options title属性插入到
  • vue中动态水印

    效果 一 根元素div上增加 div class rootZhy div 二 增加方法 watermarkZhy content let container document body let width 120px let height
  • BeanCreationException: Error creating bean with name ‘configurationPropertiesBeans‘ defined in class

    1 现象 启动 SpringCloud项目时报错 2 解决方案 2 1 spring cloud dependencies添加到dependencyManagement标签
  • STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解

    上一篇 主目录 下一篇 文章目录 一 基础知识点 二 开发环境 三 STM32CubeMX相关配置 1 STM32CubeMX基本配置 2 STM32CubeMX RS485 相关配置 四 Vscode代码讲解 五 结果演示以及报文解析 六
  • Spring Boot 添加拦截器

    文章目录 Spring Boot 添加拦截器 方法1 新增拦截器 配置拦截器 方法2 新增拦截器 配置拦截器 拦截所有响应 Spring Boot 添加拦截器 介绍一下在Spring Boot 2 0 0以上版本如何添加拦截器 方法1 新增