当前位置: 首页 > news >正文

SpringBoot的HandlerInterceptor拦截器使用方法

一、创建拦截器

通过实现HandlerInterceptor接口创建自己要使用的拦截器

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Configuration
public class LoginTicketInterceptor implements HandlerInterceptor {/*** preHandle最先执行的方法* @param request   请求* @param response  响应* @param handler   当前请求请求的控制器方法对象  DemoController#demo* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("==========1=============");return true;}/**** @param request* @param response* @param handler   当前请求请求的控制器方法对象  DemoController#demo* @param modelAndView  模型和视图   当前请求访问方法的modelandview对象* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("==========2=============");}/**** @param request* @param response* @param handler   当前请求请求的控制器方法对象  DemoController#demo* @param ex    如果控制器出现异常时异常对象* @throws Exception* 这个方法相当于:try{}catch{}finally{}中的finally{}代码块  总是执行    无论请求正确或出现异常都会进入该方法*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("==========3=============");}
}

其中preHandle方法是Http请求执行之前去执行的

其中postHandle方法是执行请求路径的方法后去执行的

其中afterCompletion方法是所有Http请求完成后去执行的

这个是Http请求路径的方法

import com.springboot3.domain.Course;
import com.springboot3.domain.DataTime;
import com.springboot3.mapper.CourseMapper;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.concurrent.ConcurrentHashMap;@RequestMapping("/course")
@RestController
@CrossOrigin
@Slf4j
public class CourseController {@Autowiredprivate RedissonClient redissonClient;@Autowiredprivate CourseMapper courseMapper;@Autowiredprivate RedisTemplate redisTemplate;@GetMapping("/test/{id}")public ConcurrentHashMap<String, DataTime>  test(@PathVariable("id")String id, HttpServletResponse response) {ConcurrentHashMap<String, DataTime> treeMap = new ConcurrentHashMap<>();RLock lock = null;try {Object courseRedis = redisTemplate.opsForValue().get(id);lock = redissonClient.getLock("CourseLock");lock.lock();if (courseRedis == null) {Course course = courseMapper.selectById(id);redisTemplate.opsForValue().set(course.getId(),course);dateTime(id, treeMap);}else{dateTime(id, treeMap);}} catch (Exception e) {throw new RuntimeException(e);} finally {lock.unlock();}Cookie cookie=new Cookie("ticket","ticket");cookie.setMaxAge(3600*2);response.addCookie(cookie);System.out.println("正在执行Course接口");return treeMap;}private void dateTime(String id, ConcurrentHashMap<String, DataTime> treeMap) {DataTime dataTime = new DataTime();dataTime.setData(redisTemplate.opsForValue().get(id));dataTime.setTime(LocalDateTime.now());treeMap.put("dataTime",dataTime);}
}

二、将拦截器注册到Spring中

package com.springboot3.config;import com.springboot3.interceptor.LoginTicketInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Autowiredprivate LoginTicketInterceptor loginTicketInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginTicketInterceptor);}
}

三、测试结果

 

相关文章:

SpringBoot的HandlerInterceptor拦截器使用方法

一、创建拦截器 通过实现HandlerInterceptor接口创建自己要使用的拦截器 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.…...

java 常用 jar 包

1 Lombok 是一个 java 类库&#xff0c;它利用注解方式自动生成 java bean 中 getter、setter、equals 等方法&#xff0c;还能自动生成 logger、toString、hashCode、builder 等 日志相关变量、Object 类方法或设计模式相关的方法&#xff0c;能够让你的 代码更简洁&#xff0…...

C#面试十问

1&#xff1a;C#中变量类型分为哪两种&#xff1f;它们的区别是什么&#xff1f;2&#xff1a;Class和Struct的区别&#xff1f;3&#xff1a;C#中类的修饰符和类成员的修饰符有哪些&#xff1f;4&#xff1a;面向对象的三个特征&#xff08;特点&#xff09;是什么&#xff1f…...

Day 41 动态规划part03 : 343. 整数拆分 96.不同的二叉搜索树

96. 不同的二叉搜索树 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1…...

四轴飞行器的电池研究(MatlabSimulink仿真)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

准备HarmonyOS开发环境

引言 在开始 HarmonyOS 开发之前&#xff0c;需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…...

Java 面试 - Redis

Redis Redis 是基于键值对的非关系型数据库。Redis 拥有string、hash、list、set、zset等多种数据结构, redis具有惊人的读写性能, 其优秀的持久化机制是的它在断电和机械故障时也不会发生数据丢失, 可以用于热点数据存放, 还提供了键过期、发布订阅、食物、流水线、LUA脚本等多…...

【Go 基础篇】Go语言结构体之间的转换与映射

在Go语言中&#xff0c;结构体是一种强大的数据类型&#xff0c;用于定义和组织不同类型的数据字段。当我们处理复杂的数据逻辑时&#xff0c;常常需要在不同的结构体之间进行转换和映射&#xff0c;以便实现数据的转移和处理。本文将深入探讨Go语言中结构体之间的转换和映射技…...

Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)

多线程案例 一、设计模式&#xff08;单例模式工厂模式&#xff09;1、单例模式2、工厂模式 二、阻塞式队列1、生产者消费者模型2、阻塞对列在生产者消费者之间的作用3、用标准库阻塞队列实现生产者消费者模型4、模拟实现阻塞队列 三、定时器1、标准库中的定时器2、模拟实现定时…...

将 ordinals 与 比特币智能合约集成 : 第 1 部分

将序数与比特币智能合约集成&#xff1a;第 1 部分 最近&#xff0c;比特币序数在区块链领域引起了广泛关注。 据称&#xff0c;与以太坊 ERC-721 等其他代币标准相比&#xff0c;Ordinals 的一个主要缺点是缺乏对智能合约的支持。 我们展示了如何向 Ordinals 添加智能合约功…...

【USRP】集成化仪器系列1 :信号源,基于labview实现

USRP 信号源 1、设备IP地址&#xff1a;默认为192.168.10.2&#xff0c;请勿 修改&#xff0c;运行阶段无法修改。 2、天线输出端口是TX1&#xff0c;请勿修改。 3、通道&#xff1a;0 对应RF A、1 对应 RF B&#xff0c;运行 阶段无法修改。 4、中心频率&#xff1a;当需要…...

串行协议——USB驱动[基础]

多年前的学习记录&#xff0c;整理整理。 一、USB协议基础 二、Linux内核USB驱动源码分析 USB中不同类型设备使用的 设备描述符(设备类\设备子类\设备协议) 配置不同,典型的以下几种:1)HID设备: Human Input Device人工输入设备, 如鼠标\键盘\游戏手柄等.2)CDC设备: Communi…...

健康舒适的超满意照明体验!SUKER书客SKY护眼台灯测评

健康舒适的超满意照明体验&#xff01;SUKER书客SKY护眼台灯测评 2022年全国儿童青少年总体近视率为53.6%&#xff0c;其中6岁儿童为14.5%&#xff0c;小学生为36%&#xff0c;初中生为71.6%&#xff0c;高中生为81%&#xff0c;近视已成为当下人们遇到的比较普遍的眼健康问题…...

PID 算法

1.1 概述 比例&#xff08;Proportion&#xff09;积分&#xff08;Integral&#xff09;微分&#xff08;Differential&#xff09;控制器&#xff08;PID控制器或三项控制器&#xff09;是一种采用反馈的控制回路机制&#xff0c;广泛应用于工业控制系统和需要连续调制控制的…...

13.Redis 事务

Redis 事务 redis 事务事务操作multi 开启事务exec 执行事务discard 放弃当前事务watchunwatch redis 事务 Redis 的事务和 MySQL 的事务概念上是类似的。 都是把⼀系列操作绑定成⼀组。 让这⼀组能够批量执⾏。 Redis 的事务和 MySQL 事务的区别: 弱化的原⼦性: 这里指的是 …...

李宏毅机器学习课程笔记(更新ing)

CNN 为什么AlphaGo可以用CNN&#xff1f;棋盘抽象成图片时需要注意什么&#xff1f; 首先图片有两个特点&#xff1a; 1&#xff0c;只观察局部就可以显示某种pattern&#xff0c;比如要得出一个鸟嘴的结论&#xff0c;只需要观察局部图片 2&#xff0c;某种pattern可以出现在图…...

SIP mini 对讲终端,带sip热点功能

SV-A10/SV-A10W SIP mini 对讲终端&#xff0c;带sip热点功能 SV-A10/SV-A10W 是专门针对行业用户需求研发的一款 SIP mini 对讲产品&#xff0c;外观小巧&#xff0c;功能 强大&#xff0c;集智能安防、音/视频对讲和广播功能于一体&#xff0c;性价比高。支持壁挂式安装/86…...

PHP中根据出生年月日计算年龄的封装函数

在 PHP 中&#xff0c;你可以使用以下函数来根据出生年月日计算年龄&#xff1a; 封装函数 function calculateAge($birthday) {$currentDate date(Y-m-d);$birthdayDate date(Y-m-d, strtotime($birthday));$age date_diff(date_create($currentDate), date_create($birt…...

Linux巡检脚本

做运维的朋友都知道&#xff0c;大家经常要对一些系统做月度维护或者自查&#xff0c;在这个过程中&#xff0c;如果只是小工作量的查询&#xff0c;进入系统直接输入命令即可。但是如果说要查询的系统很多&#xff0c;每个系统中要查询的项目也很多&#xff0c;那么每次都要一…...

SQLite 3.43.0 发布,又有啥新功能?

SQLite 开发团队于 2023 年 08 月 24 日发布了 SQLite 3.43.0 版本。本文给大家分析一下该版本的更新。 全文索引 SQLite 3.43.0 增加了 Contentless-Delete FTS5 索引。这是一种 FTS5 全文索引的变种&#xff0c;不存储被索引的内容&#xff0c;同时支持数据的删除操作。 例…...

百度自研高性能ANN检索引擎,开源了

作者 | Puck项目组 导读 Puck是百度自研的开源ANN检索引擎。Puck开源项目包含两种百度自研的检索算法&#xff0c;以高召回、高准确、高吞吐为目标&#xff0c;适用于多种数据规模和场景。随着业务发展不断的优化和迭代&#xff0c;进行充分的技术开发和测试&#xff0c;确保了…...

golang遍历map的方法

在Go语言中&#xff0c;可以使用range关键字来遍历一个map。range关键字会返回两个值&#xff1a;key和value。 以下是遍历map的示例代码&#xff1a; package main import "fmt" func main() { myMap : map[string]int{ "apple": 1, "banana…...

如何让Android平台像网络摄像机一样实现GB28181前端设备接入?

技术背景 好多开发者在做国标对接的时候&#xff0c;首先想到的是IPC&#xff08;网络摄像头&#xff09;&#xff0c;通过参数化配置&#xff0c;接入到国标平台&#xff0c;实现媒体数据的按需查看等操作。 像执法记录仪等智能终端&#xff0c;跑在Android平台&#xff0c;…...

文盘Rust -- 生命周期问题引发的 static hashmap 锁 | 京东云技术团队

2021年上半年&#xff0c;撸了个rust cli开发的框架&#xff0c;基本上把交互模式&#xff0c;子命令提示这些cli该有的常用功能做进去了。项目地址&#xff1a;https://github.com/jiashiwen/interactcli-rs。 春节以前看到axum已经0.4.x了&#xff0c;于是想看看能不能用rus…...

SpringMVC入门篇

目录 1.SpringMVC工作流程 2.SpringMVC核心组件 2.1 DispatcherServlet 2.2 HandlerMapping 2.3 Handler 2.4 HandlerAdapter 2.5 ViewResolver 2.6 View 3.SpringMVC的入门 3.1 添加相关依赖 3.2 创建Spring-mvc.xml 3.3 配置web.xml 3.4 效果演示 4.静态资源处…...

面经:安卓学习笔记

文章目录 1. Android系统架构2. Activity2.0 定义2.1 生命周期2.2 生命状态2.3 启动模式 3. Service3.1 定义3.2 两种启动方式3.3 生命周期3.4 跨进程service3.5 IntentService 4. BroadCastReceiver4.1 概念4.2 组成4.3 广播接收器的分类4.4 生命周期4.5 静态注册和动态注册 5…...

Java设计模式:四、行为型模式-06:观察者模式

文章目录 一、定义&#xff1a;观察者模式二、模拟场景&#xff1a;观察者模式2.1 观察者模式2.2 引入依赖2.3 工程结构2.4 模拟摇号2.4.1 摇号服务接口2.4.2 摇号返回结果类 三、违背方案&#xff1a;观察者模式3.0 引入依赖3.1 工程结构3.2 添加摇号接口和实现3.2.1 摇号服务…...

vscode中讨厌的蓝色波浪线的去除小trick和原理

问题描述 不小心“设置同步”时和远程电脑的合并&#xff08;merge&#xff09;了&#xff0c;然后就出现了这个问题&#xff01;烦死了&#xff01;&#xff01;&#xff01; 大概是这个样子&#xff1a; 解决办法 站在了巨人的肩膀上&#xff0c;在下图位置输入这样一行参数&…...

开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

近期换了工作电脑&#xff0c;公司的IT团队不够给力&#xff0c;不能复制电脑系统&#xff0c;所以又到了需要重装IDE配置开发环境的时候了&#xff1b;在安装和导入Java编译器IDEA的时候遇到一些"棘手"问题&#xff0c;这里整理下解决方法以备不时之需&#xff1b; …...

AcWing 787:归并排序

【题目来源】https://www.acwing.com/problem/content/789/【题目描述】 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。【输入格式】 输入共两行&#xff0c;第一行包含整数 n。 第二行包含 n 个整数&#…...

深圳设计网站/网站优化排名易下拉排名

PWA 是一种新兴的移动 Web 应用程序模式&#xff0c;现在可以采用。它们也可能是你在不影响服务质量的情况下节省资金的下一个机会&#xff0c;并帮助你的组织更快地提供服务&#xff0c;而不会破坏你对业务目标和新客户获取的关注。 下面来看看 PWA 是否适合企业。 什么是渐进…...

个人怎么建立网站吗/产品推广方案要包含哪些内容

学习数据结构书和卷子也有一段时间了&#xff0c;对本书也有了一定的宏观认知&#xff0c;在这里就来分享一下个人对数据结构的理解和认识。 总览 第一章讨论问题的求解步骤及概念。讨论数据结构、数据、数据元素、数据项、数据逻辑结构、数据存储结构、运算、算法时间复杂度…...

佛山营销手机网站建设/怎样优化网站关键词排名靠前

学习设计模式不光要学习设计模式的思想&#xff0c;还要去深入理解&#xff0c;为什么要用这个设计模式。 如何深入理解&#xff1f;读优秀的框架代码&#xff0c;看别人代码&#xff0c;了解它们的使用场景。 - - - 博主老师&#xff08;感谢他&#xff09; 本文先介绍了工厂方…...

帮人做网站被派出所抓到徐州/阿里巴巴怎么优化关键词排名

1.要在andorid中实现网络图片查看&#xff0c;涉及到用户隐私问题&#xff0c;所以要在AndroidManifest.xml中添加访问网络权限 <uses-permission android:name"android.permission.INTERNET"/> 2.布局文件 <LinearLayout xmlns:android"http://schem…...

网站制作首选 新鸿儒/上热门最火标题

前言&#xff1a;分类是机器学习中的重要的一种功能&#xff0c;在机器学习的研究历史中&#xff0c;诞生了大量的分类算法&#xff0c;而每种算法都有其优势和不足。 本文汇总了常用的分类算法及其实现方式&#xff0c;方便快速查询使用。&#xff08;本文使用鸢尾花数据集&am…...

襄阳网站seo公司/seo诊断工具网站

大端和小端&#xff08;Big-Endian和Little-Endian&#xff09;&#xff1a; 1) Little-Endian就是低位字节排放在内存的低地址端&#xff0c;高位字节排放在内存的高地址端。 2) Big-Endian就是高位字节排放在内存的低地址端&#xff0c;低位字节排放在内存的高地址端。 以…...