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

【springsecurity】使用PasswordEncoder加密用户密码

目录

  • 1. 导入依赖
  • 2. 配置 PasswordEncoder
  • 3. 使用 PasswordEncoder 加密用户密码
  • 4. 使用 PasswordEncoder 验证用户密码

1. 导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 配置 PasswordEncoder

      在配置类中创建一个 PasswordEncoder 对象,并注入到 Spring 容器中。

@Configuration
public class SecurityConfig {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();// 加密方式}
}

3. 使用 PasswordEncoder 加密用户密码

      写一个Service 类,注入 PasswordEncoder 对象,在注册用户时对密码进行加密。

@Service
public class ResUserBizImpl implements ResUserBiz{@Autowiredprivate ResUserMapper resUserMapper;// 注入加密器@Autowiredprivate PasswordEncoder passwordEncoder;@Overridepublic int register(ResUserVO user) {//需要先查询是否已经存在相同用户名// 创建条件构造器QueryWrapper<Resuser> queryWrapper = new QueryWrapper<>();// 添加条件:用户名queryWrapper.eq("username", user.getUsername());if (resUserMapper.selectOne(queryWrapper) != null) {// 已经存在相同用户名throw new RuntimeException("用户名"+user.getUsername()+"已存在");}Resuser resuser = new Resuser();resuser.setUsername(user.getUsername());// 对密码进行加密String encodedPassword = passwordEncoder.encode(user.getPwd());System.out.println("加密后的密码为:"+encodedPassword);resuser.setPwd(encodedPassword);resuser.setEmail(user.getEmail());resUserMapper.insert(resuser);return resuser.getUserid();}
}

      测试加密情况:
在这里插入图片描述

      可能出现的问题:

      我在测试的时候报了MysglDataTruncation错误,提示Data truncation: Data too long for column 'pwd' at row 1(如下图),提示了密码长度过长。
这是因为 数据库中 pwd 字段长度为 50,而BCryptPasswordEncoder生成的加密密码长度通常为 60 个字符的字符串,所以出现了长度过长的错误。
在这里插入图片描述在这里插入图片描述

      解决:修改数据库字段长度。

ALTER TABLE your_table MODIFY COLUMN pwd VARCHAR(255);

4. 使用 PasswordEncoder 验证用户密码

      在登录时,使用 PasswordEncoder 的matches("明文", "密文")对比用户输入的密码和数据库中存储的加密后的密码是否匹配。

    @Overridepublic Resuser searchUser(ResUserVO user) {QueryWrapper<Resuser> queryWrapper = new QueryWrapper<>();queryWrapper.eq("username",user.getUsername());String pwd = user.getPwd();Resuser resuser = resUserMapper.selectOne(queryWrapper);if (resuser != null){//使用matches方法比较明文和加密后的密码是否匹配if (passwordEncoder.matches(pwd,resuser.getPwd()))return resuser;}return null;}

参考链接:

spring security 官方文档:https://docs.spring.io/spring-security/reference/index.html

spring security 中文文档:https://springdoc.cn/spring-security/index.html

参考博客:https://blog.csdn.net/m0_71273766/article/details/132942056?spm=1001.2014.3001.5501

相关文章:

【springsecurity】使用PasswordEncoder加密用户密码

目录 1. 导入依赖2. 配置 PasswordEncoder3. 使用 PasswordEncoder 加密用户密码4. 使用 PasswordEncoder 验证用户密码 1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifac…...

从0到1实现线程池(C语言版)

目录 &#x1f324;️1. 基础知识 ⛅1.1 线程概述 ⛅1.2 linux下线程相关函数 &#x1f325;️1.2.1 线程ID &#x1f325;️1.2.2 线程创建 &#x1f325;️1.2.3 线程回收 &#x1f325;️1.2.4 线程分离 &#x1f324;️2. 线程池概述 ⛅2.1 线程池的定义 ⛅2.2 为…...

Visual studio自动添加头部注释

记事本打开VS版本安装目录下的Class.cs文件 增加如下内容&#xff1a;...

【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南

优化异步任务处理&#xff1a;C#异步I/O库全面解析 前言 在C#开发中&#xff0c;异步I/O是一个重要的主题。为了提高性能和响应速度&#xff0c;开发人员需要深入了解各种异步I/O库的功能和用法。本文将介绍几个常用的C#异步I/O库&#xff0c;包括Task Parallel Library、Asy…...

管理医疗AI炒作的三种方法

一个人类医生和机器人医生互相伸手。 全美的医院、临床诊所和医疗系统正面临重重困难。他们的员工队伍紧张且人员短缺&#xff0c;运营成本不断上升&#xff0c;服务需求常常超过其承受能力&#xff0c;限制了医疗服务的可及性。 人工智能应运而生。在自ChatGPT推出将AI推向聚…...

VMware Workstation Pro Download 个人免费使用

参考 VMware Workstation Pro Download...

DevOps平台搭建过程详解--Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台

一、环境说明 1.1CI/CD CI即为持续集成(Continue Integration,简称CI)&#xff0c;用通俗的话讲&#xff0c;就是持续的整合版本库代码编译后制作应用镜像。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等;(Jenkins) CD即持续交付Con…...

Nginx之日志切割,正反代理,HTTPS配置

1 nginx日志切割 1.1 日志配置 在./configure --prefixpath指定的path中切换进去&#xff0c;找到log文件夹&#xff0c;进去后找到都是对应的日志文件 其中的nginx.pid是当前nginx的进程号&#xff0c;当使用ps -ef | grep nginx获得就是这个nginx.pid的值 在nginx.conf中…...

Mysql数据量大,如何拆分Mysql数据库(垂直拆分)

垂直拆分&#xff08;Vertical Partitioning&#xff09;是一种将数据库按照业务模块或功能进行拆分的方法&#xff0c;目的是将不同模块的数据放到不同的数据库中&#xff0c;从而减少单个数据库的压力&#xff0c;提高系统的性能和可扩展性。垂直拆分适用于数据量大且业务模块…...

机器人可能会在月球上提供帮助

登月是我们这个时代最具标志性的事件之一&#xff0c;这可能还算轻描淡写了&#xff1a;这是我们迄今为止在物理上探索得最远的一次。我听过一些当时的老广播&#xff0c;它们可以让你想象出这次航行的重要性。 现在&#xff0c;研究人员表示&#xff0c;我们可能很快就能重返…...

真实案例分享:零售企业如何避免销售数据的无效分析?

在零售业务的数据分析中&#xff0c;无效分析不仅浪费时间和资源&#xff0c;还可能导致错误的决策。为了避免这种情况&#xff0c;企业必须采取策略来确保他们的数据分析工作能够产生实际的商业价值。本文将通过行业内真实的案例&#xff0c;探讨零售企业如何通过精心设计的数…...

ctfshow-文件包含

web78 <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 判断是否存在file参数 如果存在 将包含这个参数值 文件 php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执…...

Qt事件处理机制

用qt实现简单闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H #include<QPushButton> #include<QTextEdit> #include<QLabel> #include <QWidget> #include<QMouseEvent> #include<QPoint> #include<QTime> #include<QTimer&…...

vue axios 如何读取项目下的json文件

在 Vue 项目中&#xff0c;使用 axios 读取本地的 JSON 文件可以通过将 JSON 文件放置在 public 目录中&#xff0c;然后通过 axios 发起请求读取。 步骤&#xff1a; 将 JSON 文件放置在 public 目录下&#xff1a; Vue 项目中的 public 目录是静态资源目录&#xff0c;项目编…...

燃气涡轮发动机性能仿真程序GSP12.0.4.2使用经验(二):使用GSP建立PG9351FA燃气轮机性能仿真模型

目录 一、PG9351FA燃气轮机简介及热力循环参数二、基于GSP的性能仿真模型设置环境参数设置进气道参数设置压气机参数设置燃烧室参数设置透平&#xff08;涡轮&#xff09;参数设置转子负载参数燃油流量外部控制 三、仿真结果四、其它 一、PG9351FA燃气轮机简介及热力循环参数 …...

迟滞比较器/施密特触发器

功能 从下面原理图像看来&#xff0c;只有在达到上下阈值才会出现输出电平的转换&#xff0c;这样防止信号的杂波跳变。而且每次的阈值是随着输出而变化的&#xff0c;当输出高时&#xff0c;阈值如下图中&#xff0c;V_PV_N V_R*( RF/(R1RF) )VH*( R1/(R1RF) );当输出低时&a…...

LeetCode_sql_day22(1112.每位学生的最高成绩)

描述&#xff1a;1112.每位学生的最高成绩 表&#xff1a;Enrollments ------------------------ | Column Name | Type | ------------------------ | student_id | int | | course_id | int | | grade | int | ------------------------ (st…...

OFDM信号PARP的CCDF图

文章目录 引言代码代码疑难解答参考文献 引言 本书主要参考了文献1&#xff0c;但实际上该书中符号和表述的错误非常多&#xff08;只能说棒子是这样的&#xff09;&#xff1b;同时因为发表时间的关系&#xff0c;很多MATLAB代码进行了更新&#xff0c;原书提供的代码已经无法…...

LeetCode之高频SQL50题

查询 1757. 可回收且低脂的产品 584. 寻找用户推荐人 595. 大的国家 1148. 文章浏览 I 1683. 无效的推文 连接 1378. 使用唯一标识码替换员工ID 1068. 产品销售分析 I 1581. 进店却未进行过交易的顾客 197. 上升的温度 1661. 每台机器的进程平均运行时间 577. 员工…...

echarts多组堆叠柱状图

一、效果图 二、代码实现 1、创建容器 <el-card class"box-card"><div slot"header" class"clearfix"><span>课堂学习</span></div><div id"class-learning" style"height: 360px">&l…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...