Spring Security-PasswordEncoder密码解析器详解和自定义登录逻辑

news/2025/11/22 10:16:17/文章来源:https://www.cnblogs.com/velloLei/p/19255572

在Spring Security中,BCryptPasswordEncoder是一个非常强大的工具,用于对密码进行加密,以确保存储的密码的安全性。
BCrypt是一种基于Blowfish密码哈希函数的加密算法,专门设计为防止通过彩虹表攻击和暴力破解等常见密码破解手段。

如何使用BCryptPasswordEncoder

1. 添加依赖
首先,确保你的项目中已经包含了Spring Security的依赖。如果你使用的是Maven,可以在pom.xml中添加如下依赖:

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

2. 创建BCryptPasswordEncoder实例
在你的Spring配置中,你可以创建一个BCryptPasswordEncoder的Bean。例如,在一个配置类中:


import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;@Component
public class PasswordConfig {@Beanpublic BCryptPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

3. 使用BCryptPasswordEncoder加密密码
你可以通过注入BCryptPasswordEncoder的Bean来加密密码。例如,在一个服务类中:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate BCryptPasswordEncoder passwordEncoder;public String encodePassword(String rawPassword) {return passwordEncoder.encode(rawPassword);}
}

4. 验证密码
使用BCryptPasswordEncoder的matches方法可以验证原始密码和存储的加密密码是否匹配:


public boolean checkIfRawPasswordMatches(String rawPassword, String encodedPassword) {return passwordEncoder.matches(rawPassword, encodedPassword);
}

示例代码整合使用


@Autowired
private UserService userService; // 假设你已经有了这个服务类和方法实现。public void registerUser(String username, String rawPassword) {String encodedPassword = userService.encodePassword(rawPassword); // 加密密码// 存储username和encodedPassword到数据库等操作...
}public boolean login(String username, String rawPassword) { // 登录时验证密码// 从数据库获取用户的加密密码...String storedEncodedPassword = "从数据库获取的加密密码"; // 示例代码,实际应从数据库获取。return userService.checkIfRawPasswordMatches(rawPassword, storedEncodedPassword); // 验证密码是否匹配。
}

注意事项
‌强度级别‌:BCryptPasswordEncoder允许你设置强度级别(默认是10),级别越高,加密过程越慢,但安全性也越高。例如:new BCryptPasswordEncoder(12);。
‌盐值‌:BCrypt自动为每个密码生成一个盐值,这使得即使是相同的原始密码也会生成不同的加密结果。这是为了防止使用彩虹表攻击。
‌存储‌:始终存储加密后的密码,而不是原始密码。这样做可以防止数据泄露导致的安全问题

扩展
除了BCryptPasswordEncoder加密方式还是Pbkdf2PasswordEncoder、SCryptPasswordEncoder、Argon2PasswordEncoder等,当然也可以自定义PasswordEncoder

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

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

相关文章

2025 胶管厂家最新推荐排行榜:耐高压 35MPa / 热熔 / 特种工况优质品牌精选矿用/大口径吸排泥/低压/耐高温/钢丝编制/输油胶管公司推荐

引言 在工业生产、石油钻探、工程机械等核心领域,胶管作为流体输送关键部件,其耐压性、耐腐蚀性与适配性直接决定生产安全与效率。据国际流体输送设备协会(IFTA)最新测评数据显示,全球胶管市场不合格产品发生率达…

2025 装盒机厂家最新推荐排行榜:全自动 / 食品 / 纸巾 / 卫生巾装盒机权威测评,技术创新与整线配套能力

引言 在全球包装工业智能化升级的浪潮中,装盒机作为后道包装核心设备,其性能稳定性、智能化水平与整线适配能力直接决定生产效率与产品品质。当前市场品牌繁杂,设备质量差异显著,诸多企业面临产能不足、人工成本高…

模板进阶:从非类型参数到分离编译,吃透 C++ 泛型编程的核心逻辑 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

机械 / 汽车 / 电子设计师必看!Creo 11.0 下载安装,创成式设计 + 实时仿真

Creo 11.0 是 PTC 公司推出的一款高性能 3D CAD 设计软件,主打适配电气化、复合材料设计等多个前沿领域,在建模效率、跨领域协作、仿真与制造适配等方面都做了大幅增强,广泛适用于机械设计、汽车工程、电子产品研发…

Linux 中截取文本的最后几个字符

001、 awk 实现[root@PC1 test2]# ls a.txt [root@PC1 test2]# cat a.txt 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 [root@PC1 test2]# awk {print substr($0, length($0) - 2)} a.txt …

2025年新疆初三复读班权威推荐榜单:中考复读/初三集训班/本地中考复读学校精选

新疆初三复读教育市场近年来呈现专业化、规范化的发展趋势,为学子们提供了多元化的提升路径。 随着中考竞争日趋激烈,新疆初三复读市场需求持续增长。据教育行业统计,新疆地区专业初三复读机构中,实施小班化教学的…

11.20题解

A. 卡牌 场上只想出来 60 的部分分。 去想那额外的十分暴力,发现可以做一个线性基。这启发我们是否可以从线性基的角度去解决这道问题。 我把 a 和 b 拼起来,比如以 (a << 20 | b) 的形式插入线性基中。肯定不…

11.21题解

A.游戏 考虑到如果 x 是最大值,那么就是两个人轮流取的局面;否则就是一个人拿走了一段后缀,另一个人拿走了 x 周围的一段。我们可以二分这段后缀长度或者另一个人拿的最大值,check 一下就行了。 B. 插队 看到这个先…

黔东南苗族侗族自治州一对一家教机构推荐,2025教育机构靠谱测评排行榜

黔东南“苗乡侗寨里的孩子偏科补了半载没起色,找个靠谱的一对一家教咋就这么难?” 这声无奈感叹,道出了无数黔东南苗族侗族自治州家长的心声。无论是凯里市大十字国贸商圈周边的核心家庭,麻江、丹寨的县域亲子,黄…

面向对象程序设计-三次单部电梯调度问题总结

南昌航空大学-23207114-齐宇硕-三次单部电梯调度问题大作业总结前言这三次大作业均是关于单步电梯调度的问题,第二、三次大作业的代码逻辑和第一次大作业是一样的,区别主要在于,新增了更加严谨的输入方式,并且进一…

2025年鹌鹑蛋蒸煮剥壳流水线实力厂家权威推荐榜单:鹌鹑蛋煮蛋机/鹌鹑蛋剥壳机/鹌鹑蛋剥壳线源头厂家精选

在食品加工自动化浪潮中,高效可靠的鹌鹑蛋蒸煮剥壳设备正成为企业降本增效的关键利器。 随着食品工业化进程加速和劳动力成本上升,我国蛋品加工行业正经历着从传统手工生产向自动化、智能化生产的深刻变革。 据行业统…

NHVR-20 型油气回收在线监测系统:工业级全场景油气泄漏防控方案 - 详解

NHVR-20 型油气回收在线监测系统:工业级全场景油气泄漏防控方案 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

9 个步骤教你如何安全地迁移数据库或字段

9 个步骤教你如何安全地迁移数据库或字段 问题描述 这篇文章要讲的是一个非常具体且棘手的问题:唯一 ID 迁移。 现在有一个实体 User,由 User::$id 标识,看起来像这样: final class User {public function __const…

衡水市一对一家教机构推荐,2026最新辅导机构口碑排行榜

在衡水市桃城区、冀州区、枣强县、武邑县、深州市、武强县、饶阳县、安平县、故城县、景县、阜城县,从衡水百货大楼商圈、怡然城商圈到爱琴海购物公园、汇中广场的家长社群里,“孩子成绩提不上来”的焦虑从未消散。数…

黔西南布依族苗族自治州一对一家教机构推荐,2025最新教育机构权威测评榜单

“给孩子找一对一家教机构比跑遍黔西南的山山水水还难!”这是兴义市家长陈女士的真切感慨。她的孩子初三面临中考,数学和物理成绩一直拖后腿,两个月内试了4家课外辅导机构,要么老师不熟悉黔西南中考考点,要么课后…

铜仁市一对一家教机构推荐,2025最新教育机构靠谱测评榜单

铜仁市不少家长为孩子找一对一课外补习时总陷入两难:想选口碑好的家教辅导机构,却被广告里 “提分神速” 的噱头误导;要么遇到师资信息模糊、教学水平没保障的培训平台,要么碰上收费混乱、退费困难的教育机构。据本…

承德市一对一家教机构推荐,2026最新辅导机构权威测评榜单

“孩子数学偏科拖后腿、英语成绩常年在及格线徘徊,补了大半年物理依旧没起色,想找一家真正懂承德考情、能稳提分的一对一辅导机构,咋就这么难?”这声无奈的感叹,道出了万千承德市家长的心声。无论是双桥区南营子大…

2025年11月工业CT厂家推荐榜:权威评测与综合对比分析

作为工业制造领域的关键检测技术,工业CT在产品质量控制、缺陷分析和逆向工程中扮演着重要角色。根据2025年行业白皮书显示,随着新能源汽车、航空航天等高端制造业的快速发展,工业CT市场需求呈现稳定增长态势。许多用…

2025年二手淀粉加工设备定制厂家权威推荐榜单:二手小型淀粉设备/二手红薯淀粉加工设备/二手淀粉设备源头厂家精选

在资源循环利用与降本增效的双重驱动下,二手淀粉加工设备市场正迎来新一轮增长机遇。据行业数据显示,2024年全球淀粉市场销售额达到了23.36亿美元,预计到2031年将保持稳定增长。在这一市场中,二手设备交易规模年均…

2025年11月工业CT厂家评测榜单:结合政策导向与市场反馈的客观分析

工业CT作为无损检测领域的核心设备,其选择关系到科研精度与生产效率。本文基于行业白皮书数据与用户调研,针对工程师、质检人员、研发团队等典型用户群体,分析其在设备选型中的核心需求:例如航空航天领域注重微米级…