SpringBoot统一功能处理
一、统一用户登录权限验证
1.1Spring拦截器
实现拦截器需要以下两步:
1.创建自定义拦截器,实现 HandlerInterceptor 接⼝的 preHandle(执行具体方法之前的预处理)方法。
2.将⾃定义拦截器加⼊ WebMvcConfigurer 的 addInterceptors 方法中
1.1.1自定义拦截器

package com.example.demo.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** 创建一个登录的拦截器*/
public class LoginInterceptor implements HandlerInterceptor {//返回true表示验证通过,可以执行后面的方法;// 但是返回false表示验证失败,后面的代码就不能执行了@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession(false);if (session != null && session.getAttribute("userinfo") != null){//表明用户已登录return true;}//执行到此行,表明验证未通过,自动跳转到登录页面response.sendRedirect("login.html");return false;}
}
1.1.2将拦截器配置给当前项目

package com.example.demo.config;import com.example.demo.interceptor.LoginInterceptor;
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 AppConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;/*** 给当前项目添加拦截器* @param registry*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**")//拦截使用的url.excludePathPatterns("/user/reg")//不拦截/user/reg.excludePathPatterns("/**/*.html");//拦截/**/*.html}
}

1.2拦截器实现原理

二、统⼀异常处理
使用 @ControllerAdvice + @ExceptionHandler来实现
@ControllerAdvice:控制器通知类
@ExceptionHandler:异常处理器
结合表示当出现异常的时候执行某个通知。
2.1创建异常类
添加@ControllerAdvice 注解

2.2实现异常的封装方法
添加@ExceptionHandler注解

package com.example.demo.config;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;@ControllerAdvice//对控制器进行功能增强(当前类为统一封装类)
public class MyExceptionResult {@ResponseBody@ExceptionHandler(Exception.class)public HashMap<String,Object> myException(Exception e){HashMap<String,Object> result = new HashMap<String,Object>();result.put("state",-1);result.put("msg","默认异常"+e.getMessage());result.put("data",null);return result;}
}
三、统⼀数据格式返回
以使⽤ @ControllerAdvice + ResponseBodyAdvice实现

package com.example.demo.config;import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import java.util.HashMap;@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice {//是否要重写的方法改为true,true表示在返回数据之前,进行统一的格式封装@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {HashMap<String,Object> result = new HashMap<>();result.put("state",1);result.put("data",body);result.put("msg","");return result;}
}相关文章:
SpringBoot统一功能处理
一、统一用户登录权限验证 1.1Spring拦截器 实现拦截器需要以下两步: 1.创建自定义拦截器,实现 HandlerInterceptor 接⼝的 preHandle(执行具体方法之前的预处理)方法。 2.将⾃定义拦截器加⼊ WebMvcConfigurer 的 addIntercept…...
2022年3月电子学会Python等级考试试卷(五级)答案解析
目录 一、单选题(共25题,共50分) 二、判断题(共10题,共20分) 三、编程题(共3题,共30分) 青少年软件编程(Python)等级考试试卷(五级&#...
【C++】智能指针
目录 一、先来看一下什么是智能指针 二、 auto_ptr 1、C98版本 2、C11的auto_ptr 三、boost 库中的智能指针 1. scoped_ptr 2、shared_ptr(最好的智能指针) 四、C11中新提供的智能指针 unique_ptr shared_ptr std::shared_ptr的循环引用问题…...
Seata架构篇 - AT模式
AT 模式 概述 Seata AT 模式是一种非侵入式的分布式事务解决方案,Seata 在内部做了对数据库操作的代理层,我们使用 Seata AT 模式时,实际上用的是 Seata 自带的数据源代理 DataSourceProxy,Seata 在这层代理中加入了很多逻辑&am…...
加油站会员管理小程序实战开发教程12
我们上一篇介绍了会员数据源的开发,本节我们介绍一下会员注册功能。 首先呢梳理一下会员注册的业务逻辑,如果用户是首次登录,那他肯定还没有给我们的小程序提交任何的信息。那么我们就在我的页面给他显示一个注册的按钮,如果他已经注册过了,那么就正常显示会员的信息,他…...
用腾讯云同步Obsidian笔记
介绍 之前用gitee同步OB笔记,同时做图床。但由于git系产品设置起来相对复杂,且后续可能有外链过审等问题。周五被同事小姐姐安利了用腾讯云COS,试了一下,果然不错。其主要优点如下: 设置简单,学习成本低&…...
浅析C++指针与引用,栈传递的关系
目录 前言 C 堆指针 栈指针 常量指针 指针常量 引用 常量引用 总结 前言 目前做了很多项目,接触到各种语言,基本上用什么学什么,语言的边际就会很模糊,实际上语言的设计大同小异,只是语言具备各自的特性区别。…...
图解LeetCode——剑指 Offer 10- II. 青蛙跳台阶问题
一、题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97(1000000007),如计算初始结果为:1000000008,请返回 1。 二、示例 2.1>…...
【Linux】用户分类+权限管理+umask+粘滞位说明
目录 1.用户分类 su指令 2.认识Linux权限 2.1 文件访问者的分类 2.2 文件类型和访问权限 a. 文件类型 file指令 b. 访问权限 2.3 文件权值的表示方法 a. 字母表示法 b. 八进制表示法 3.如何修改文件访问者的权限及相关指令 1. chmod指令 2. chown指令 3. chgrp指…...
【干货】如何打造HR无法拒绝的简历?测试开发大牛带手把手你写简历!
通过率90%,优秀的软件测试简历长什么样? 也许口才好的人会觉得简历不重要,能说就行了,那是因为你没有体会过石沉大海的感觉! 很多人觉得疑惑,为什么我投了那么多简历,都没有接到面试通知&…...
nodejs学习-4:nodejs连接mongodb和相关操作
1. express生成器生成express模板 前提需要首先下载好:express-generator,命令如下(全局安装) npm install -g express-generator生成模板命令如下: express 项目名称 --viewejs // --view 参数表示前端界面使用的引擎,这里使用…...
【博客629】Linux DNS解析原理与配置
Linux DNS解析原理与配置 1、DNS缓存 作用: 程序客户端、下游的 DNS 服务器每次查询 DNS 成功之后,通常会将该 DNS 记录缓存一段时间,避免频繁发出查询请求的耗时。 Linux下的DNS缓存: Linux 系统默认不会在本地建立 DNS 缓存…...
【CSP】202212-2 训练计划
题目 问题背景 西西艾弗岛荒野求生大赛还有 天开幕! 问题描述 为了在大赛中取得好成绩,顿顿准备在 天时间内完成“短跑”、“高中物理”以及“核裂变技术”等总共 项科目的加强训练。其中第 项( )科目编号为 ,也可简…...
java基础学习 day42(继承中构造方法的访问特点,this、super的使用总结)
继承中,构造方法的访问特点 父类的构造方法不会被子类继承,但可以通过super()调用父类的构造方法,且只能在子类调用,在测试类中是不能手动单写构造方法的。子类中所有的构造方法默认先调用父类的无参构造,再执行自己构…...
生物医药多组学与生物信息方法介绍
基因组学告诉你可能发生什么,转录组学和蛋白组学告诉你即将发生什么,而代谢组学告诉你正在发生什么 1、多组学与生信方法 生物医学技术的组学包括基因组学、转录组学、蛋白质组学、代谢组学和表观基因组学等。这些组学研究领域通过大量数据的高通量技术…...
【进阶篇】线程的硬件基础
文章目录高速缓存缓存一致性协议写缓冲区和无效化队列高速缓存 简介 高速缓存是主内存与处理器之间的硬件,其容量小于主存,但存取速率远高于主存。因此处理器在执行读写操作时,可直接和高速缓存交互,提高响应速度。 我们常见的变…...
关于 ISP Tuning的学习,分享几点看法
关于学习,分享几点看法,欢迎讨论 。1、分阶段性的,阶梯式学习。2、带目的性的,任务式学习。3、有总结性的,输出式学习。如上3条,可以依次循环去执行,下面我以 ISP Tuning 的学习为例,…...
RocketMQ源码阅读
没有用过rocketmq,但是一直对RocketMQ的实现很感兴趣,本次阅读源码基于5.0.0 一、 nameserver 通过源码阅读发现,它的作用主要是当作一个注册中心,注册broker、topic等信息,维护topic以及broker队列的路由信息&#…...
重磅 | 小O软件新品【鲸鱼地图】发布
千呼万唤始出来.......,小O系列软件又添新品【鲸鱼地图】!!! 2023年新年伊始,小O就投入到新品研发工作中,秉承“发现地理价值”理念,为用户提供更加好用、易用的地图软件产品,经过春…...
腾讯地图SDK隐私协议合规接入实战:你的App真的合法显示地图了吗?
腾讯地图SDK隐私合规实战:从法律条文到代码落地的全流程指南 当你的App因为地图功能被应用商店拒审时,当用户投诉你的应用"偷偷收集位置信息"时,当合规团队发来长达20页的整改清单时——这些场景正在成为移动开发者的日常。去年某社…...
5分钟解决PDF转Markdown痛点:Marker工具全场景应用指南
5分钟解决PDF转Markdown痛点:Marker工具全场景应用指南 【免费下载链接】marker 一个高效、准确的工具,能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式,支持多语言和复杂布局处理,可选集成 LLM 提升精度,适…...
Transformer横空出世!解决NLP难题,引爆AI革命!
Transformer模型自2017年推出以来,已成为人工智能领域最具影响力的创新之一。本文深入探讨了Transformer的基本原理、出现背景及其精巧的架构设计。Transformer通过自注意力机制,成功克服了RNN在处理长序列数据时的长距离依赖和并行计算瓶颈,…...
Buildah多平台容器构建终极指南:使用QEMU跨架构构建Docker镜像
Buildah多平台容器构建终极指南:使用QEMU跨架构构建Docker镜像 【免费下载链接】buildah A tool that facilitates building OCI images. 项目地址: https://gitcode.com/gh_mirrors/bu/buildah Buildah作为专业的OCI镜像构建工具,为开发者提供了…...
NUC 13 Pro装Ubuntu 20.04,WiFi图标消失?别急着换网卡,先试试这个BIOS固件更新法
NUC 13 Pro安装Ubuntu 20.04后WiFi图标消失的终极解决方案 当你满怀期待地在NUC 13 Pro上安装好Ubuntu 20.04,准备开始高效工作时,却发现系统托盘里那个熟悉的WiFi图标神秘消失了——这种挫败感我深有体会。更令人困惑的是,蓝牙功能却完全正…...
CK3M多轴运动控制器实战:EtherCAT总线伺服系统从零配置全解析
1. CK3M控制器与EtherCAT系统初识 第一次接触CK3M多轴运动控制器时,我完全被它强大的功能震撼到了。这款控制器就像工业自动化领域的"大脑",能够同时协调多个伺服电机精准运动。而EtherCAT总线技术则是连接这个大脑与各个执行机构(…...
150元搞定无人机自主避障?上交大开源方案实测(附部署教程)
150元打造无人机自主避障系统:开源方案实战指南 当大多数人还在为动辄上万元的无人机避障系统望而却步时,一个仅需150元计算硬件的开源方案正在创客圈掀起风暴。这不是实验室里的概念验证,而是经过真实环境测试、能部署在你家后院的技术方案。…...
Unix哲学:一切皆文件与网络通信的统一抽象
目录 Unix哲学:一切皆文件与网络通信的统一抽象 1. Unix哲学的核心:“一切皆文件” 2. 统一接口:Unix I/O操作 3. 文件描述符:操作的“取货单” 4. 网络通信:套接字作为特殊文件 5. 总结:抽象的力量 前…...
OpenPose终极指南:10分钟掌握人体姿态估计核心技术
OpenPose终极指南:10分钟掌握人体姿态估计核心技术 【免费下载链接】openpose 项目地址: https://gitcode.com/gh_mirrors/op/openpose 想要快速搭建专业级的人体姿态识别系统吗?OpenPose作为业界领先的开源姿态估计库,能够实时检测图…...
从机械臂精度控制到模型防过拟合:工程师视角下的‘无穷范数’实用指南
从机械臂精度控制到模型防过拟合:工程师视角下的‘无穷范数’实用指南 在工业自动化和机器学习领域,工程师们常常面临一个共同挑战:如何有效控制系统中的"最坏情况"。无论是机械臂关节的极限误差,还是神经网络对抗样本…...
