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

news2024/11/22 21:07:46

目录

  • 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 {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();// 加密方式
    }
}

3. 使用 PasswordEncoder 加密用户密码

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

@Service
public class ResUserBizImpl implements ResUserBiz{
    @Autowired
    private ResUserMapper resUserMapper;

    // 注入加密器
    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public 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("明文", "密文")对比用户输入的密码和数据库中存储的加密后的密码是否匹配。

    @Override
    public 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker部署NginxProxyManager

1.效果展示 有啥用&#xff1f;&#xff0c; 能把域名代理到 117.xx.xx.xx:3000 服务器上 而不用写一堆的location / { proxy… } 2.步骤 2.1往期docker安装 docker和docker-compose安装脚本-CSDN博客 2.2创建目录 mkdir ~/npm #创建一个目录用来安装此服务 cd ~/npm #…

兴业周报|“一套房子不留”的马斯克 在北京买房了?

稀有房源&#xff1a;标的物位于北京五环内&#xff0c;真正的城市别墅。中间建筑三区“全网无二手”&#xff0c;二手房市场无在售房源。 高性价比&#xff1a;标的物市场价2800万&#xff0c;起拍价1124万&#xff0c;四折上拍&#xff0c;四室两厅南北通透&#xff0c;建面…

基于SpringBoot的口腔管理平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 会员管理 病例就诊…

RuoYi-Vue若依框架-系统监控内定时任务的使用

定时任务 之前定时任务是在后端代码内使用cron表达式对对应的接口方法按照表达式执行&#xff0c;现在可以在框架内自行添加任务&#xff0c;包括自定义任务名&#xff0c;在调用方法内写对应实体类.接口方法名&#xff0c;cron表达式&#xff0c;添加好后即可执行 调用方法…

业余考什么证书比较实用?

在业余时间里&#xff0c;获得一些有用的证书不仅能提升你的专业素养&#xff0c;还能增强你在职场上的竞争力。 特别是职业技能证书和行业认证证书&#xff0c;这两者受到了广大职场人士的高度关注。 一、业余时间考取的实用证书 行业认证证书主要针对特定行业或职业&#…

16 训练自己语言模型

在很多场景下下&#xff0c;可能微调模型并不能带来一个较好的效果。因为特定领域场景下&#xff0c;通用话模型过于通用&#xff0c;出现多而不精。样样通样样松&#xff1b;本章主要介绍如何在特定的数据上对模型进行预训练&#xff1b; 训练自己的语言模型&#xff08;从头开…

AT3340-6T杭州中科微BDS定位授时板卡应用领域

AT3340-6T是一款高性能多系统卫星定位安全授时板卡&#xff0c;具有高灵敏度、高精度、抗干扰、低功耗等优势&#xff0c;可以满足电力授时、通信授时和金融授时等领域的应用。 电文完好性检测与告警 AT3340-6T 板卡支持电力授时标准要求的 UTC 信息异常告警&#xff0c;和卫…

基于Spring Boot的高校选课平台的设计与实现81917

目 录 1 绪论 1.1研究背景与意义 1.2研究内容 1.3论文结构与章节安排 2 高校选课平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 高校选课…

【OpenCV-图像梯度】Scharr算子和laplacian算子

1 图像梯度-Sobel算子 import cv2 # 导入 OpenCV 库# 读取灰度图像 img cv2.imread(./img/pie.png, cv2.IMREAD_GRAYSCALE) # 使用 imread 函数读取图像文件&#xff0c;路径为 ./img/pie.png # cv2.IMREAD_GRAYSCALE 表示以灰度模式读取图像# 显示图像 cv2.imshow("im…

Muduo库介绍及使用

文章目录 MuduoMuduo库是什么Moduo 库的原理Muduo 库常见接口TcpServer类EventLoop类TcpConnection类TcpClient类Buffer类 Muduo库实现一个简单英译汉服务器和客⼾端 Muduo Muduo库是什么 Muduo由陈硕⼤佬开发&#xff0c;是⼀个基于⾮阻塞IO和事件驱动的C⾼并发TCP⽹络编程库…

SpringSecurity原理解析(三):请求流转过程

1、当web系统启动的时候SpringSecurity做了哪些事情&#xff1f; 当web系统启动的时候会加载WEB-INF下的web.xml文件&#xff0c;在web.xml主要配置了下边几块的 内容&#xff0c;分别是&#xff1a; 1&#xff09;加载classpath路径下的配置文件&#xff08;包括SpringSecurit…

开关电源自动化测试有哪些流程和步骤?-天宇微纳

开关电源自动化测试的总体流程包括测试前的准备、测试过程中的具体步骤和测试后的数据处理三大部分。 以纳米软件ATECLOUD平台测试为例&#xff1a; ‌测试前的准备‌ ‌连接设备和仪器‌&#xff1a;通过LAN通讯总线、测试夹具以及其它线缆将需要测试的电源模块连接到纳米服…

【C语言】指针深入讲解(下)

目录 前言回调函数回调函数的概念回调函数的使用 qsort函数的使用和模拟实现qsort函数的介绍qsort函数的使用qsort函数模拟实现 前言 今天我们来学习指针最后一个知识点回调函数&#xff0c;这个知识点也很重要&#xff0c;希望大家能坚持学习下去。 没学习之前指针知识内容的…

k8s的配置管理

一、配置管理分为两种&#xff1a; 1. 加密配置&#xff1a;用来保存密码和token密钥对以及其它敏感的k8s资源。 2.应用配置&#xff1a;我们需要定制化的给应用进行配置&#xff0c;我们需要把定制好的配置文件同步到pod当中的容器。 二、加密配置 1.secret三种类型&#xf…

WPS取消首字母自动大写

WPS Office&#xff08;12.1.0.17827&#xff09; ① 点击文件&#xff0c;在文件中找到选项 ② 选择编辑&#xff0c;取消勾选

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利&#xff0c;不是随便说说&#xff0c;诸葛亮六出祁山&#xff0c;连关中陇右的几座小城都攻不下来&#xff0c;行军山高路险&#xff0c;无法携带和建造攻城器械&#xff0c;是最难的&#xff0c;所以在汉中&#xff0c;无论从哪一方进攻&#xff0c;防守方…

计算机为啥选中二进制?

坊间传闻&#xff0c;当年&#xff0c;彷徨少年computer有幸读到东方奇书《道德经》中一段&#xff1a;“道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物。”忽然灵光乍现&#xff0c;做五体投地状。“啊门、主啊&#xff0c;我get到了&#xff0c;狗屁二生三…

「滚雪球学MyBatis」教程导航帖(已完结)

写在前面 我是bug菌&#xff0c;CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家&#xff0c;C站博客之星Top30&#xff0c;华为云2023年度十佳博主&#xff0c;掘金多年度人气作者Top40&#xff0c;掘金等各大社区平台签约作者&#xff0c;51CTO年度博…

python爬虫爬取淘宝商品比价||淘宝商品详情API接口

最近在学习北京理工大学的爬虫课程&#xff0c;其中一个实例是讲如何爬取淘宝商品信息&#xff0c;现整理如下&#xff1a; 功能描述&#xff1a;获取淘宝搜索页面的信息&#xff0c;提取其中的商品名称和价格 探讨&#xff1a;淘宝的搜索接口 翻页的处理 技术路线:requests‐…

随身WiFi大揭秘!9毛3000G?坑你没商量!博主亲测,教你如何避坑!

随身WiFi老坑人&#xff1f;流量收费坑&#xff1f;网速坑&#xff1f;今天本博主重金自费入购7款随身WiFi测评&#xff0c;这份避坑指南请您收好了&#xff01; 随身WiFi多吓人啊&#xff0c;一块9毛钱3000个G&#xff0c;还有的是5块9毛钱3000个G&#xff0c;确实有3000个G&…