SpringBoot统一功能处理的三个常见实例

news/2024/10/20 5:45:13/

我们的统一功能处理肯定是通过Spring拦截器处理的撒

Spring拦截器 

截器的实现分为以下两个步骤:

1. 创建⾃定义拦截器,实现 HandlerInterceptor 接⼝的 preHandle(执⾏具体⽅法之前的预处理)⽅ 法。

2. 将⾃定义拦截器加⼊ WebMvcConfigurer 的 addInterceptors ⽅法中。

统一登录处理

假如说我们在用一个网站的时候 无论你打开哪个分页 只要登录状态失效 就会让你重新登录 这种功能我们总不能在每个分页里面都放一个登录操作 麻烦死 所以我们就使用Spring拦截器来 统一登录处理

1.自定义拦截器

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 {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletRespon
se response, Object handler) throws Exception {HttpSession session = request.getSession(false);if (session != null && session.getAttribute("userinfo") != null) {return true;}response.setStatus(401);return false;}
}

preHandle的重写没啥好说的 就这么约定的

然后去获取请求中的session

这里提一嘴request.getsession的三种参数

1.无参数 从当前request中获取session 如果获取不到session 则会自动创建一个session,并返回新创建的session,如果获取到 就返回获取到的session

2.true 大体和无参时一致

3.false 在获取不到session时不会自动创建session 而是会返回null

这里登录的逻辑是 如果有session就不需要登录了没session再登录 这要是你再返回个新创建的session 那就坏了

关于返回 true就是表示可以通过(还会被其他的拦截器验证) false就是拦截(就死这儿了 其他拦截器也甭尝试了)

将⾃定义拦截器加⼊到系统配置

@Configurationpublic class AppConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") .excludePathPatterns("/wuhu");}
}

@Configuration注解 标注这个是组件(别管 反正就是规定)

在registry.addInterceptor这里 添加我们之前自定义的拦截器 也可以不选择new的方式,进行属性注入也可

addPathPatterns  表示需要拦截的 URL,“**”表示拦截所有方法。

excludePathPatterns  表示需要排除的 URL。 

也就是说实际的拦截范围是 所有URL减去 /wuhu 的部分

统一异常处理

我们在编写代码的时候 老会提示 哎呀 这个异常要处理 那个异常要处理 本来挺精简个代码的  trycatch一包围 一下子可读性就降低了 你说不处理吧 还不能运行 处理吧还不好看

所以我们就使用这个 统一异常处理

import java.util.HashMap;
@ControllerAdvicepublic class ErrorAdive {@ExceptionHandler(Exception.class)@ResponseBodypublic Object handler(Exception e) {HashMap<String, Object> map = new HashMap<>();map.put("state", 0);map.put("data", null);map.put("msg", e.getMessage());return map;}
}

统⼀异常处理使⽤的是 @ControllerAdvice + @ExceptionHandler 来实现的,@ControllerAdvice 表 示控制器通知类,@ExceptionHandler 是异常处理器,两个结合表示当出现异常的时候执⾏某个通知 这个统一异常处理一步就可以 不需要再把它加入系统配置中了

@ExceptionHandler(Exception.class)  这个参数表示异常的类
 public Object handler(Exception e) 这个参数表示要拦截的异常

然后我们直接自定义一个hashmap把想返回的数据都放在一起 一起返回

统一数据返回

我们在开发过程中 写了很多方法 前端一看 好家伙一坨数据 这啷个看的懂 就追着后端(很可能是你)

那基本没好了 八十个返回 跟你 沟流八十来次 所以为了防止这种情况的发生 直接统一数据返回格式 就讲一次就行(当然你要是暗恋前端那就另说了)

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.ResponseBodyA
dvice;import java.util.HashMap;
@ControllerAdvicepublic class ResponseAdvice implements ResponseBodyAdvice {/*** 内容是否需要重写(通过此⽅法可以选择性部分控制器和⽅法进⾏重写)* 返回 true 表示重写*/@Overridepublic boolean supports(MethodParameter returnType, Class converterTyp
e) {return true;}/*** ⽅法返回之前调⽤此⽅法*/@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType,Class selectedConverterType, ServerHttpR
equest request,ServerHttpResponse response) {// 构造统⼀返回对象HashMap<String, Object> result = new HashMap<>();result.put("state", 1);result.put("msg", "");result.put("data", body);return result;}
}

真没啥说的

 HashMap<String, Object> result = new HashMap<>();
 result.put("state", 1);
 result.put("msg", "");
 result.put("data", body);
 return result;

除了这块以外都是约定 就要求这么写

这块和上面一样 就是把数据统一收集在HashMap中 然后一起返回 


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

相关文章

[算法前沿]--017-中文大模型ChatGLM微调:P-Tuning,deepspeed,LoRA<中>

文章目录 1. ChatGLM模型介绍2. 基于 P-Tuningv2的高效参数微调方法2.1 环境配置2.3 P-TuningV2 教程2.3.1 训练2.3.1.1 P-Tuning v22.3.1.2 Finetune2.3.1.3 LoRA2.3.2 推理2.3.2.1 示例12.3.2.2 示例22.3.3 评估结果1. ChatGLM模型介绍 ChatGLM-6B 是一个开源的、支持中英双语…

【历史上的今天】5 月 26 日:美国首个计算机软件程序专利;苹果市值首次超越微软;Wiki 的发明者出生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 5 月 26 日&#xff0c;在 1995 年的今天&#xff0c;微软公司首席执行官比尔盖茨发表了一番讲话&#xff0c;他认为自己的公司在估计互联网的影响和普及方面错…

windows 环境jar包设置自启动

在Windows操作系统中&#xff0c;可以通过创建一个批处理文件并将其添加到Windows服务中来设置Spring Boot JAR包的开机自启动。具体步骤如下&#xff1a; 创建一个名为spring-boot-app.bat的批处理文件&#xff0c;并在其中指定启动Spring Boot应用程序的命令&#xff0c;如下…

【C++进阶之路】内存管理

文章目录 一.内存管理1. 内存布局2. C的内存管理 ①内置类型② 自定义类型 3. operate new 与 operate delete ① 解读operate new源代码② 解读operate delete源代码 4. new和delete的基本原理①new对类对象②delete对类对象 拓展—— 深入理解delete[]和new[]对比 C和C内存…

Mysql数据库备份 一天一次 保存最新五天 每天凌晨三点备份

Mysql数据库备份 一天一次 保存最新五天 每天凌晨一点三十备份 步骤一 先查看 sudo systemctl status crond 是否存在 不存在执行下面代码 sudo yum install cronie sudo systemctl start crond sudo systemctl enable crond sudo systemctl status crond 步骤二 Cd /home …

SpringBoot与RedisCacheManager整合

本文根据众多互联网博客内容整理后形成&#xff0c;引用内容的版权归原始作者所有&#xff0c;仅限于学习研究使用 SpringBoot 缓存管理器CacheManager 从3.1开始Spring定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技…

A-21S吸金树脂在金矿尾水、镀金废水中回收金的应用

吸金树脂Tulsimer A-21S 一、技术介绍 传统上使用活性碳吸附金子&#xff0c;珍贵的金会被活性碳吸附于表面&#xff0c;再藉由洗涤或直接焚烧以回收金。使用离子交换树脂回收贵金属比活性碳还具有多方面的优势&#xff0c; 因为藉由特殊制造过程中&#xff0c; 我们可以在其结…

linux搭建hadoop环境

1、安装JDK   &#xff08;1&#xff09;下载安装JDK&#xff1a;确保计算机联网之后命令行输入下面命令安装JDK    sudo apt-get install sun-java8-jdk   &#xff08;2&#xff09;配置计算机Java环境&#xff1a;打开/etc/profile&#xff0c;在文件最后输入下面…