springBoot添加自定义拦截器

2023-11-15

前言

新的项目需要校验用户是否登录 在springBoot项目中添加一个自定义的拦截器拦截到所有请求进行逻辑判断

步骤如下:

首先新建一个自己的拦截器

自己的拦截器需要实现HandlerInterceptor 接口 并重写自己需要的方法 preHandle 在请求实际到达controller之前拦截校验

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author liang
 */
public class ApiLoginInterceptor implements HandlerInterceptor {

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

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        //进行一些你自己的业务校验 如果校验失败了 用 returnJson向response写入返回的内容
        if (true){
            returnJson(response,new ResultVO(ResultEnum.SYS_OPERATE_FAIL));
            return false;
        }
        return true;
    }

    private void returnJson(HttpServletResponse response, ResultVO resultVO) {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        try (PrintWriter writer = response.getWriter()) {
            String res = JSONObject.toJSONString(resultVO);
            writer.print(res);
        } catch (IOException e) {
            logger.error("exception:", e);
        }
    }


}

其次 把自己的拦截器注册到spring中 让其生效

实现WebMvcConfigurer类 并将类用@Configuration注解标注 他为一个配置类 实际是包含了@Component注解将此类注入到了spring容器中

import org.springframework.context.annotation.Bean;
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 WebConfigurer implements WebMvcConfigurer {

    @Bean
    public ApiLoginInterceptor apiLoginInterceptor(){
        return new ApiLoginInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(apiLoginInterceptor()).addPathPatterns("/api/**")
                .excludePathPatterns("/api/haha/he");
    }
}

注意addPathPatterns是拦截器需要拦截的请求路径 支持通配符格式的匹配,也支持全路径 excludePathPatterns是不进行拦截的请求路径,匹配模式相同 这里也可以不用这两个属性而是自己写一个自定义注解 在自定义的拦截器中判断方法是否有注解来决定是否放行(注意路径里面不要写项目的context-path他是从context-path之后开始匹配的)

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

springBoot添加自定义拦截器 的相关文章

随机推荐

  • Python发送信息及附件到邮箱

    import smtplib import os from email mime text import MIMEText from email mime multipart import MIMEMultipart from email
  • PB的组合查询

    用PB进行数据库应用系统开发时 我们经常要对大量的数据进行筛选 查询 得到符合要求的记录 这就需要用到组合条件查询功能 我在作应用系统开发时 就自己编写了一个简单而又实用的组合条件查询模板窗口 只要用到组合条件查询的地方 都可从此窗口继承而
  • 【华为OD机试真题 JAVA】火星文计算

    JS版 华为OD机试真题 JS 火星文计算 标题 火星文计算 时间限制 1秒 内存限制 262144K 语言限制 不限 已知火星人使用的运算符为 其与地球人的等价公式如下 x y 2 x 3 y 4 x y 3 x y 2 1 其中x y是
  • webpack打包项目文件

    在项目开发中想了解一下使用webpack打包vue项目的具体操作 1 在命令窗口中使用npm run dev serve启动package json中配置的脚本运行项目 2 在build dev server js文件中 const con
  • 通行时间估计 读书笔记

    Learning to Estimate the Travel Time Didichuxing 中文提示 通行时间估计 特征提取 对路段中所有可能获取的数据进行特征提取 包括交叉路口 route 信号灯信息 路段长度 宽度 车道数 本段在
  • 【2023】华为OD机试真题Java-题目0198-整理扑克牌

    整理扑克牌 题目描述 给定一组数字 表示扑克牌的牌面数字 忽略扑克牌的花色 请安如下规则对这一组扑克牌进行整理 步骤一 对扑克牌进行分组 规则如下 当牌面数字相同张数大于等于4时 组合牌为炸弹 三张相同牌面数字 两张相同牌面数字 且三张牌与
  • 统计学---之样本方差与总体方差的区别

    前段日子重新整理了一下这个问题的解答 跟大家分享一下 如果有什么错误的话希望大家能够提出来 我会及时改正的 话不多说进入正题 首先 我们来看一下样本方差的计算公式 刚开始接触这个公式的话可能会有一个疑问就是 为什么样本方差要除以 n 1 而
  • Java加密技术(十一)——双向认证

    对于双向认证 做一个简单的描述 服务器端下发证书 客户端接受证书 证书带有公钥信息 用于验证服务器端 对数据加密 解密 起到OSI五类服务的认证 鉴别 服务和保密性服务 这只是单向认证 为什么 因为客户端可以验证服务器端 但服务器端不能验证
  • Mac前往服务器文件夹变成灰色,[mac]解决移动硬盘文件显示灰色的问题

    在mac上创建的文件 在复制到移动硬盘上后 变成灰色且不能操作 项目已被 macOS 使用 不能打开 在移动硬盘上变成灰色的文件 双击会提示 项目已被 macOS 使用 不能打开 打开终端输入 ls eln 灰色文件路径 image png
  • 新手如何使用pycharm

    开启coding之旅 我在写代码的时候 我总是因为安装包和环境的问题 代码总是bug不断 短段的两天时间 我整天扑在上面研究 不断地抓头 短段两天 我感觉我的头发都凸了一点了 后来我实在解决不了 于是直接付费请教别人帮我装机 就为了完成最简
  • Jenkins 设置镜像_在k8s上安装Jenkins及常见问题

    持续集成和部署是DevOps的重要组成部分 Jenkins是一款非常流行的持续集成和部署工具 最近试验了一下Jenkins 发现它是我一段时间以来用过的工具中最复杂的 一个可能的原因是它需要与各种其它工具集成才能完成任务 而集成的方法又各不
  • XML转JavaBean的简单实现

    一个基于JSON的简单的XML转为Bean的方法 之前在做一个WEB SERVICE的交互的时候 写的一个基于JSON的XML转Bean的方法 就把它整理处理 如下 gt pom xml 所有需要的依赖包如下
  • 使用ChatGPT自动编写Python爬虫脚本

    都知道最近ChatGPT聊天机器人爆火 我也想方设法注册了账号 据说后面要收费了 ChatGPT是一种基于大语言模型的生成式AI 换句话说它可以自动生成类似人类语言的文本 把梳理好的有逻辑的答案呈现在你面前 这完全不同于传统搜索工具 Cha
  • Unity Mesh网格编程(三) Shader实现水面或旗帜飘扬效果

    Upgrade NOTE replaced Object2World with unity ObjectToWorld Upgrade NOTE replaced mul UNITY MATRIX MVP with UnityObjectT
  • 【Unity3D小功能】Unity3D中实现UI擦除效果、刮刮卡功能

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好 我是佛系工程师 恬静的小魔龙 不定时更新Unity开发技巧 觉得有用记得一键三连哦 一 前言 使用Unity3D实现UI的擦拭效果 刮刮卡
  • php图片居中显示图片,CSS实现图片居中的三种方式

    在我们的WEB前端css开发过程中 我们避免会遇到让图片居中的情况 为了网页美观以及用户的体验 我们有时候就要让图片居中 那么我们也都知道图片居中的方法有很多 今天我们就给大家详细介绍下CSS实现图片居中的三种方式 1 利用display
  • Docker入门命令

    文章目录 1 安装Docker 2 搜索 下载镜像 3 查询本地镜像 4 启动镜像到容器 5 查询已启动镜像 容器 6 进入容器环境 7 创建镜像 7 1 基于已有镜像的容器创建 7 2 基于本地模板导入 7 3 基于Dockerfile创
  • AI绘图:教你几个提示词 100%生成美丽小姐姐

    许多常用提示对于确保高质量的成像结果至关重要 我们将教您一些基本的提示词和设置 以节省您在初始探索过程中的时间 本次用到的模型ChilloutMix 基础设置 默认设置包括图片 大小 512 x 512 采样器 DPM SDE Karras
  • 逆序栈(使用递归)

    题目 一个栈依次压入1 2 3 4 5那么从栈顶到栈底分别为5 4 3 2 1 将这个栈转置后 从栈顶到栈底为1 2 3 4 5 也就是实现了栈中元素的逆序 请设计一个算法实现逆序栈的操作 但是只能用递归函数来实现 而不能用另外的数据结构
  • springBoot添加自定义拦截器

    文章目录 前言 步骤如下 首先新建一个自己的拦截器 其次 把自己的拦截器注册到spring中 让其生效 前言 新的项目需要校验用户是否登录 在springBoot项目中添加一个自定义的拦截器拦截到所有请求进行逻辑判断 步骤如下 首先新建一个