Springboot_实战

项目开发

lombok使用

自动为实体类提供get、set、toString方法

引入依赖

在这里插入图片描述

实体类上添加注解

在这里插入图片描述

统一响应结果

注意要写get、set方法;下面是错误的,因此要加上@Data注解
在这里插入图片描述

一个注册的接口的示例

Controller层

在这里插入图片描述

Service层

在这里插入图片描述

Mapper层

在这里插入图片描述

参数校验

在这里插入图片描述
在这里插入图片描述
但是同样存在一个问题,就是当参数不合法的时候,会报异常,因此前端接受的就不是我们定义的统一返回格式;
所以要使用全局异常处理器
@RestControllerAdice代表返回的是Json字符串
在这里插入图片描述
其中还要注意密码存在数据库中使用MD5加密

登录

登录认证

为什么要有登录认证?用户没有登录,用户不能访问其他功能的接口
令牌中应该具有的功能:
在这里插入图片描述

jwt

分为头部、载荷和签名三个部分;
头部通常包含两部分信息:

typ: 表示令牌的类型,通常为"JWT"。
alg: 表示所使用的签名算法,如HS256(HMAC SHA256)或RS256(RSA SHA256)。

有效载荷部分包含声明(Claims),声明可以分为三种类型:
注册声明(Registered Claims): 预定义的声明,比如iss(发行者)、exp(过期时间)、sub(主题)等。
公共声明(Public Claims): 可以自定义的声明,建议使用URI作为命名空间以避免冲突。
私有声明(Private Claims): 两个方之间自定义的声明,不会在JWT标准中定义。

为了生成签名部分,需要将编码后的头部和有效载荷以及一个密钥结合并使用指定的签名算法进行签名(所以能够知道数据是否改变了)

在这里插入图片描述
具体例子:
在这里插入图片描述
前端将获得的token放到请求头中来调用接口,后端获得请求头中token的方式:
在这里插入图片描述

使用拦截器来每次都检查调用的时候请求头中是否保存token

实现拦截器处理接口,并重写预处理方法;
实现WebMVC配置接口,将之前定义的拦截器处理对象注册到配置类中,并重写addInterceptors方法。
在这里插入图片描述
拦截器文件单独放到拦截器包下面。
在这里插入图片描述
定义配置类
在这里插入图片描述
Postman 为每个接口添加token的脚本:
在这里插入图片描述

用户敏感信息

添加@JsonIgnore,不返回密码这个字段。
在这里插入图片描述

下划线转为驼峰命名字段

在这里插入图片描述

ThreadLocal

由于在拦截器中已经进行过token解析的步骤,在接口中还进行token解析,这样很不优雅
在这里插入图片描述

原理

ThraedLocal原理:为线程提供局部变量,使得不同线程互不影响;例如有两个线程(蓝色和绿色线程)各自存入的数据只能自己访问得到。
在这里插入图片描述
在Tomcat中为不同的用户创建不同的进程,并没有说Tomcat是怎么知道不同的用户的。

如何使用

在这里插入图片描述
注意工具类ThreadLocal为静态final的;注意使用ThreadLocal如果不清除那么就会内存爆了。

package com.itheima.utils;import java.util.HashMap;
import java.util.Map;/*** ThreadLocal 工具类*/
@SuppressWarnings("all")
public class ThreadLocalUtil {//提供ThreadLocal对象,private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();//根据键获取值public static <T> T get(){return (T) THREAD_LOCAL.get();}//存储键值对public static void set(Object value){THREAD_LOCAL.set(value);}//清除ThreadLocal 防止内存泄漏public static void remove(){THREAD_LOCAL.remove();}
}

在拦截器中存放用户信息。
在这里插入图片描述
在Controller中获得之前存放的数据。
在这里插入图片描述

注意ThreadLocal的remove

在请求开始的时候进行set,在请求结束的时候释放;因此在拦截器中重写afterCompletion方法,释放内存;
在这里插入图片描述

@RequestBody

将Json字符串转化为对象

之前学的是如何验证参数,那么如何验证实体类中的参数?

在实体类中添加相关注解,还有通配符注解;
在Controller的参数前添加@Validated注解
在这里插入图片描述

Mapper函数中参数为对象,sql中想要获得属性值那么直接使用属性名就行了

在这里插入图片描述

分组校验

更新的时候校验参数不能为Null,但是添加的时候ID可以为Null;这就使用到了分组校验
在这里插入图片描述
在成员类中定义两个接口代表不同的分组;然后成员变量上面定义适用哪个组;Controller中的Validated中定义应该使用哪个组。
在这里插入图片描述
如果多个组A、B中存在相同校验规则的字段;那么可以不写校验规则,并让A和B都继承Default;例如A extends Defalt,那么被分为A类的字符段加上没有定义分组的字符段同属于A类组。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17651.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

稀土抑烟剂——为纺织品安全加持,保护您的每一寸触感

一、稀土抑烟剂的基本概念 稀土抑烟剂是基于稀土元素&#xff08;如稀土氧化物和稀土金属化合物&#xff09;研发的一类新型阻燃材料。它能够有效提高纺织品的阻燃性&#xff0c;抑制火灾发生时产生的烟雾和有害气体&#xff0c;减少火灾对人体的危害。稀土抑烟剂具有更强的稳…

本地部署SafeLine详细指南:抵御网络攻击构建更安全的网站环境

文章目录 前言1.关于SafeLine2.安装Docker3.本地部署SafeLine4.使用SafeLine5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址前言 各位建站小能手们,无论是想搭建个人博客、企业官网还是各种应用平台来推广自己的内容或产品,在这个数字时代都已经…

Chrome 浏览器可以读写本地文件了,虽说是实验api,但是基本86+已经支持了

目前该API只能在https域名上使用&#xff01;&#xff01;&#xff01; 实现逻辑&#xff1a; 1.唤醒浏览器选择文件夹、文件权限 document.getElementById(button).addEventListener(click, async () > {getFile()});async function getFile () {// 打开文件选择器 记…

华宇TAS应用中间件与因朵科技多款产品完成兼容互认证

在数字化浪潮澎湃向前的当下&#xff0c;信息技术的深度融合与协同发展成为推动各行业创新变革的关键力量。近日&#xff0c;华宇TAS应用中间件携手河北因朵科技有限公司&#xff0c;完成了多项核心产品的兼容互认证。 此次兼容性测试的良好表现&#xff0c;为双方的进一步深入…

数字IC秋招知识点—1

数字IC秋招准备知识点—1 时序逻辑与组合逻辑 1. 定义与核心原理 组合逻辑&#xff1a; 输入决定输出&#xff1a;当前的输出仅由输入决定&#xff0c;无记忆功能。无反馈回路示例&#xff1a;基本逻辑单元&#xff0c;加法器&#xff0c;多路选择器MUX&#xff0c;译码器&am…

【webview Android】视频获取首帧为封面

文章目录 需求分析获得首帧其他方法 需求分析 客户端中h5上传视频&#xff0c;视频封面默认首帧。 遇到问题&#xff1a;原生的video现象如下 IOS会在加载好后显示首帧&#xff08;没加载好显示黑屏&#xff0c;符合预期&#xff09;Android加载好后默认封面为一个奇怪的占位…

大脑网络与智力:基于图神经网络的静息态fMRI数据分析方法|文献速递-医学影像人工智能进展

Title 题目 Brain networks and intelligence: A graph neural network based approach toresting state fMRI data 大脑网络与智力&#xff1a;基于图神经网络的静息态fMRI数据分析方法 01 文献速递介绍 智力是一个复杂的构念&#xff0c;包含了多种认知过程。研究人员通…

DeepSeek如何重塑我的编程学习:计算机新生的AI实践

目录 &#x1f680;前言&#x1f31f;邂逅DeepSeek&#xff1a;从困惑到惊喜&#x1f4af;初学编程的困境&#x1f4af;DeepSeek的优势 &#x1f58a;️DeepSeek在编程学习中的运用&#x1f4af;注释&#x1f4af;算法逐步分析&#x1f4af;调试帮助&#x1f4af;跨语言迁移学习…

信息收集-Web应用JS架构URL提取数据匹配Fuzz接口WebPack分析自动化

知识点&#xff1a; 1、信息收集-Web应用-JS提取分析-人工&插件&项目 2、信息收集-Web应用-JS提取分析-URL&配置&逻辑 FUZZ测试 ffuf https://github.com/ffuf/ffuf 匹配插件 Hae https://github.com/gh0stkey/HaE JS提取 JSFinder https://github.com/Threez…

安科瑞光储充一体化微电网系统的设计与优化研究-安科瑞 蒋静

摘要&#xff1a;双碳能源技术是一种绿色、可持续的能源发展方向&#xff0c;光储充一体系统作为其中的重要组成部分&#xff0c;具有将光能转化为电能并进行储存和供电的功能。文章对光储充一体系统的设计与性能进行分析&#xff0c;以期为双碳能源技术的推广和应用提供技术支…

【BUG】Ubuntu|有nvcc,没有nvidia-smi指令,找不到nvidia-driver安装包

很奇怪&#xff0c;本来能使用的&#xff0c;放个假回来就用不了了。 排查了以下所有步骤最终解决。 我的Ubuntu版本&#xff1a;Ubuntu22 nvcc -v&#xff1a;有。如果没有的话你需要安装“sudo apt-get install nvidia-cuda-toolkit”&#xff0c;其他问题请去别的博客查。…

spring-ai快速集成deepseek大模型

一、Spring AI简介&#xff1a;Spring AI致力于简化AI项目的开发与部署流程&#xff0c;使Java开发者能够更高效地将AI技术集成到业务系统中。它提供了开箱即用的工具和接口&#xff0c;方便集成和管理各种AI模型。 目前,Spring AI 支持的 AI 平台包括&#xff1a;OpenAI (Chat…

进阶——第十六届蓝桥杯嵌入式熟练度练习(开发板输出占空比和频率)

定义变量 uint16_t PA6_frq,PA7_frq; uint16_t PA6_duty10,PA7_duty20; 开启定时器PWM HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1); 给变量赋值 PA6_frq80000000/8000/TIM16->ARR1;PA7_frq80000000/4000/TIM17->AR…

TCNE 网络安全

一.概况 CTF&#xff08;Capture The Flag&#xff09;在网络安全领域中指的是网络技术人员之间进行技术竞技的一种比赛形式&#xff0c;它起源于1996年的DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式&#xff0c;现已成为全球范围网…

信呼OA办公系统sql注入漏洞分析

漏洞描述 信呼OA办公系统uploadAction存在SQL注入漏洞&#xff0c;攻击者可利用该漏洞获取数据库敏感信息。 环境搭建 源码下载地址&#xff1a;https://github.com/rainrocka/xinhu 下载后解压到本地网站根目录下&#xff0c;配置好数据库&#xff0c;然后安装即可 默认密…

springboot如何将lib和jar分离

遇到一个问题&#xff0c;就是每次maven package或者maven install后target中的jar很大&#xff0c;少的50几MB&#xff0c;大的100多兆 优化前&#xff1a; 优化后&#xff1a; 优化前 优化后压缩率77.2MB4.65MB93% 具体方案&#xff1a; pom.xml中 <build><…

ThreadLocal源码分析

文章目录 1.核心数据结构 ThreadLocalMap1.静态内部类 Entry2.真正存储数据的是table数组 2.ThreadLocal.set()方法源码详解1.set2.getMap3.ThreadLocalMap.set4.createMap5.rehash6.resize 3.ThreadLocalMap.get()详解1.get2.ThreadLocalMap.getEntry3.getEntryAfterMiss 4.Th…

VUE环境搭建

node.js安装 node npm – node Package Management 安装完成后&#xff0c;需要设置&#xff1a; npm config set prefix "D:\nodejs"注意&#xff1a;“D:\nodejs” 此处为自己安装的node.js路径。管理员身份运行 切换镜像源 npm config set registry https://r…

卷积神经网络实战人脸检测与识别

文章目录 前言一、人脸识别一般过程二、人脸检测主流算法1. MTCNN2. RetinaFace3. CenterFace4. BlazeFace5. YOLO6. SSD7. CascadeCNN 三、人脸识别主流算法1.deepface2.FaceNet3.ArcFace4.VGGFace5.DeepID 四、人脸识别系统实现0.安装教程与资源说明1. 界面采用PyQt5框架2.人…

深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch

引言 上一篇文章《深度学习框架探秘&#xff5c;Keras&#xff1a;深度学习的魔法钥匙》 我们初步学习了 Keras&#xff0c;包括它是什么、具备哪些优势&#xff08;简洁易用的 API、强大的兼容性、广泛的应用领域&#xff09;&#xff0c;以及基本使用方法。本文&#xff0c;…