Spring Security--密码加密

news2025/4/20 14:39:13

项目的话,我们是继续写的,此时项目是已经实现了数据库的用户名,密码登录,且用的是自己的登录页面。

密码加密我们用到这PasswordEncoder这个接口

public interface PasswordEncoder {
    String encode(CharSequence rawPassword);

    boolean matches(CharSequence rawPassword, String encodedPassword);

    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}

这个接口就三个方法

第一个encode方法:加密的方法,返回的String就是加密之后的字符串

第二个matches方法:密码比对的方法,rawPassword是明文密码,encodedPassword是加密后的密码,你把这来个参数传进来,它会自动帮你比对,然后放回一个boolean值

第三个upgradeEncoding方法:是说加密方案是否需要升级

首先我们可以看看这个这个接口的实现类(alt+h)

 其中MessageDigestPasswordEncoder就是md5了

常用的还有BCryptPasswordEncoder,

BCryptPasswordEncoder方法采用了SHA-256+随机盐+密钥对密码进行加密。

class SecurityDemoApplicationTests {

    /**
     * security中密码自带盐
     */
    @Test
    void contextLoads() {
        BCryptPasswordEncoder B = new BCryptPasswordEncoder();
        for (int i = 0; i < 10; i++){
            System.out.println(B.encode("123"));
        }
    }

}

我们使用这个方法对123进行加密,得到

 可以设置密码的强度 4-31的数字,数字越大,密码强度越高,所需要的时间就越久 可以防止有人频繁去试密码,我们比对的时间会更长。

在spring security中默认使用的加密方法是

 全局搜索一个PasswordEncoderFactories

这个类是干嘛的呢,大家可以自己点开看看,里面初始化了一个DelegatingPasswordEncoder

对象,这里是把所有的加密方式都写出来了,匹配你的密码的加密方式,默认是”bcrypt“

 这里记录一个密码升级的方法

先在UserService里实现一个UserDetailsPasswordService方法

里面有这么一个方法

 当用户登录之后,这个方法会自动判断用户密码是否需要升级

判断依据是:

1.这个用户的密码加密方案是否是当前默认的方案。

2.同一种加密方案也可以升级的不同强度

 

 在登录成功后密码从原本的

 改为

 也就是默认的加密方式。

 也可以修改默认的加密方式

 以上就是密码的加密与更新。

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

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

相关文章

gitlab+jenkins+harbor实现CI/CD(1)——环境准备

gitlabjenkinsharbor实现CI/CD&#xff08;1&#xff09;——环境准备 前言一、git工具git安装初始化版本库登录上传 二、gitlab使用gitlab部署登录设置克隆项目 jenkins使用安装jenkins登录设置 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&am…

D349周赛:注意题目提示里,数据范围隐含的算法复杂度提示

文章目录 6470.既不是最大值也不是最小值完整版为什么两个for循环时间复杂度还是不变的 6465.执行子串操作后的字典序最小字符串思路最开始的写法题意理解的问题 修改版a必须单独拿出来的原因 6449.收集巧克力思路注意提示信息 完整版补充&#xff1a;由数据范围反推算法复杂度…

统计学中的「标准差和方差」

标准差(Standard deviation) 简单来说&#xff0c;标准差是一组数值自平均值分散程度的一种测量观念。一个较大的标准差&#xff0c;代表大部分的数值和其平均值之间差异较大&#xff0c;一个较小的标准差&#xff0c;代表这些数值较接近平均值。 例如&#xff1a; 两组数的集…

开源数字人、虚拟直播部署教程

TheRamU/Fay: 语音互动,直播自动带货 虚拟数字人 (github.com) gitee fay: 这是一个数字人项目,包含python内核及ue数字人模型,可以用于做数字助理及自动直播,又或者作为你的应用入口也很帅 (gitee.com) 2022.10.27 补充mac上的安装办法:(34条消息) Fay数字人开源项目…

prisma 学习记录

1、prisma 可以看做是一个 ORM。 安装 prisma npm install prisma -D 设置要链接的数据库 npx prisma init --datasource-provider sqlite --datasource-provider 要使用的数据库 2、prisma 中的模型&#xff0c; 表示底层数据库中的表或者集合。 生成 Prisma Client API 的基…

chatgpt赋能python:Python中的延迟:如何暂停程序执行?

Python中的延迟&#xff1a;如何暂停程序执行&#xff1f; 如果你在编写Python程序时需要实现延迟效果&#xff0c;比如等待某些条件满足后再进行下一步操作&#xff0c;那么你可能需要使用Python提供的延迟功能。这篇文章将介绍Python中的延迟实现方法&#xff0c;并提供几个…

记一次面试中的相关问题

1. protobuf内部的实现原理 序列化与反序列化&#xff0c;比如对于数字它要求根据数字的大小选择存储空间&#xff0c;小于15的数字只用1个字节来表示&#xff0c;大于15的数用2个字节来表示&#xff0c;以此类推&#xff0c;这样要求可以尽可能地节省空间。Protobuf的一大特点…

chatgpt赋能python:Python教程:如何建立一个空列表

Python教程&#xff1a;如何建立一个空列表 Python是一种广泛应用于科学计算、数据分析、机器学习等领域的高级编程语言。在Python中&#xff0c;列表是一种非常重要的数据类型&#xff0c;可以用来存储许多不同类型的数据。在本文中&#xff0c;我们将介绍如何在Python中建立…

OJ Primed Subsequence

原题链接&#xff1a;传送锚点 1.题目 Description Given a sequence of positive integers of length n, we define a primed subsequence as a consecutive subsequence of length at least two that sums to a prime number greater than or equal to two. For ex…

【嵌入式IMAGE 3】opencv的搭建

1. OpenCV源代码下载地址 https://opencv.org/releases/ 2. 在windows平台编译&#xff08;mingw版本&#xff09; 2.1 下载cmake https://cmake.org/files/ 2.2 配置编译器环境变量 2.3 打开cmake-gui.exe a.Use default native compilers 使用默认的本机编译器 b.Specify n…

MyBatis(全)

文章目录 什么是MyBatis?MyBatis快速入门查询user表中所有数据 Mapper代理开发使用Mapper代理方式完成入门案例 MyBatis核心配置文件配置文件完成增删改查案例&#xff1a;完成品牌数据的增删改查操作准备环境查询-查询所有数据查询-查看详情查询-条件查询--1.多条件查询方法1…

css移动端

目录 谷歌模拟器 屏幕分辨率 视口 二倍图 适配方案 rem 简介 问题 媒体查询 移动端 设备宽度不同&#xff0c;HTML标签字号设置多少合适 flexible.js rem-移动端适配 less 注释 运算 嵌套 变量 导入 导出 禁止导出 谷歌模拟器 模拟移动设备&#xff0c;方…

MySQL Community Server的安装配置教程(Windows版本)

&#xff08;1&#xff09;了解MySQL Community Server&#xff1a; MySQL Community Server是开源的MySQL数据库服务的名称。它是MySQL AB在2000年推出的一个开源数据库服务器&#xff0c;现在由Oracle公司维护和管理。 MySQL Community Server是一个关系型数据库系统&#…

通讯录管理系统(cpp)

一 系统需求 主要用C来实现一个通讯录管理系统 需要包含以下功能 添加联系人&#xff1a;向通讯录中添加新人&#xff0c;信息包括姓名、性别、年龄、联系电话、家庭住址&#xff0c;最多记录1000人显示联系人&#xff1a;显示通讯录中所有联系人信息删除联系人&#xff1a;按…

【Spring】— 动态SQL :MyBatis的关联映射

目录 MyBatis的关联映射1、关联关系概述2、MyBatis中的关联关系2.1 一对一2.2 一对多2.3 多对多 MyBatis的关联映射 在实际应用中&#xff0c;对数据库的操作会涉及多张表&#xff0c;这在面向对象中就涉及对象与对象之间的关联关系。针对多表之间的操作&#xff0c;MyBatis提…

全志V3S嵌入式驱动开发(wifi驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 荔枝派上面除了支持v3s自带的有线网口&#xff0c;还带有一个支持sd协议的esp 8089 wifi模块。有了这个模块&#xff0c;v3s没有网线&#xff0c;也…

chatgpt赋能python:Python程序与SEO:如何建立程序使您的网站优化更好

Python程序与SEO&#xff1a;如何建立程序使您的网站优化更好 今天&#xff0c;越来越多的网站和在线业务转向搜索引擎优化&#xff0c;以吸引更多访问者和客户。Python编程语言是一种快速、灵活、易于学习的工具&#xff0c;如果正确使用它可以使您的网站SEO更好。下面我们来…

【从删库到跑路】MySQL系列——数据库的介绍MySQL的启动

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;什么是数据库⭐组成⭐数据库的优势 &#x1f35…

Spring Security--自动登录

也就是remember me 在配置链上加一个 然后发送请求时加上:remember-me字段 value值可以为&#xff0c;ture&#xff0c;1&#xff0c;on 我们记住登录后&#xff0c;关掉浏览器再打开&#xff0c;访问一下接口&#xff0c;可以访问&#xff0c;说明记住登录成功了。 因为有的…

Spring中Bean的生命 周期与作用域

文章目录 前言Bean的作用域概念Bean作用域类型1. singleton&#xff1a;单例作⽤域2. prototype&#xff1a;原型作⽤域&#xff08;多例作⽤域&#xff09;3. request&#xff1a;请求作⽤域4. session&#xff1a;回话作⽤域5. application&#xff1a;全局作⽤域6. websocke…