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

Java实现密码加密实现步骤【bcrypt算法】

一、SpringBoot和SSM框架均可实现密码加密的方法

在Spring Boot和SSM中实现密码加密可以使用bcrypt算法。bcrypt是一种密码哈希函数,通过将密码与随机生成的盐值进行混合,然后再进行多次迭代的计算,最终生成一个安全的哈希密码。

下面是使用bcrypt算法实现密码加密的步骤和代码示例:

1.在pom.xml文件中添加Spring Security依赖。

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

 2.创建一个配置类来配置Spring Security。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder());}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN").antMatchers("/user/**").hasAnyRole("USER", "ADMIN").anyRequest().authenticated().and().formLogin().permitAll().and().logout().permitAll();}@Beanpublic BCryptPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Beanpublic UserDetailsService userDetailsService() {// 返回自定义的UserDetailsService实现类,用于从数据库中获取用户信息return new UserDetailsServiceImpl();}
}

3.创建自定义的UserDetailsService实现类:实现UserDetailsService接口,用于从数据库中获取用户信息。

@Service
public class UserDetailsServiceImpl implements UserDetailsService {@Autowiredprivate UserMapper userMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userMapper.findByUsername(username);if (user == null) {throw new UsernameNotFoundException("User not found");}return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), getAuthorities(user));}private Collection<GrantedAuthority> getAuthorities(User user) {List<String> roles = user.getRoles();List<GrantedAuthority> authorities = new ArrayList<>();for (String role : roles) {authorities.add(new SimpleGrantedAuthority(role));}return authorities;}
}

4.实现密码加密:在注册或更新密码时,使用BCryptPasswordEncoder类的encode()方法进行密码加密。

@Autowired
private BCryptPasswordEncoder passwordEncoder;public void registerUser(User user) {// 加密密码String encryptedPassword = passwordEncoder.encode(user.getPassword());user.setPassword(encryptedPassword);// 保存到数据库userMapper.save(user);
}

总结

通过以上步骤,我们可以在Spring Boot和SSM中实现密码加密。使用bcrypt算法可以保障密码的安全性,并且减少了手动编写哈希函数的工作量。

相关文章:

Java实现密码加密实现步骤【bcrypt算法】

一、SpringBoot和SSM框架均可实现密码加密的方法 在Spring Boot和SSM中实现密码加密可以使用bcrypt算法。bcrypt是一种密码哈希函数&#xff0c;通过将密码与随机生成的盐值进行混合&#xff0c;然后再进行多次迭代的计算&#xff0c;最终生成一个安全的哈希密码。 下面是使用…...

商城-学习整理-集群-K8S(二十三)

目录 一、k8s 集群部署1、k8s 快速入门1&#xff09;、简介2&#xff09;、架构1、整体主从方式2、Master 节点架构3、Node 节点架构 3&#xff09;、概念4&#xff09;、快速体验1、安装 minikube2、体验 nginx 部署升级 5&#xff09;、流程叙述 2、k8s 集群安装1、kubeadm2、…...

MATLAB算法实战应用案例精讲-【深度学习】强化学习

目录 基础知识点 马尔科夫决策过程 策略梯度定理 蒙特卡洛策略梯度定理 REINFORCE 算法...

时间和日期--Python

1. 时间&#xff1a;time模块 总结&#xff1a;2. datetime模块 相比与time模块&#xff0c;datetime模块的接口更直观、更容易调用 2.1 datetime模块定义的类 &#xff08;1&#xff09;datetime.date:表示日期的类。常用的属性有&#xff1a;year、month、day; &#xff…...

【Git】学习总结

【Git】学习总结 【一】安装【二】Git克隆项目代码【1】idea下载git项目【2】创建新的分支【3】新建的分支推送到远程【4】合并最新代码到主分支【5】切换分支 【三】提交本地项目到远程&#x1f680;1. 配置 Git&#x1f680;2. 创建项目远程仓库&#x1f680;3. 初始化本地仓…...

手写Spring源码——实现一个简单的spring framework

这篇文章主要带大家实现一个简单的Spring框架&#xff0c;包含单例、多例bean的获取&#xff0c;依赖注入、懒加载等功能。文章内容会持续更新&#xff0c;感兴趣的小伙伴可以持续关注一下。 目录 一、创建Java项目 二、开始实现Spring 1、创建BeanFactory接口 2、创建Appl…...

银河麒麟服务器、centos7服务器一键卸载mysql脚本

脚本 # 查看mysql相关的rpm包写到rmsql.sh文件中 rpm -aq | grep -i mysql >rmsql.sh # 修改文件为卸载mysql的脚本文件 sed -i -e s/^/yum remove -y / rmsql.sh # 修改文本权限 chmod 777 rmsql.sh # 全盘查找mysql相关文件&#xff0c;写到my.sh脚本中 find / -name mysq…...

【随笔】- 程序员的40岁后健身计划

【随笔】- 40岁后程序员的健身计划 文章目录 【随笔】- 40岁后程序员的健身计划一、树立健身信心&#xff0c;制订坚持计划二、挑选让你舒适的方式三、调整速度&#xff0c;以间歇式训练为主四、刚开始锻炼&#xff0c;别求太快五、增加力量、柔韧性和平衡练习六、运动多样化七…...

后端项目开发:集成Druid数据源

Druid作为连接池中间件可以监控数据库访问性能&#xff0c;对数据库密码加密&#xff0c;查看SQL执行日志&#xff0c;扩展JDBC。 添加依赖 <!-- druid --> <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter&…...

深度学习11:Transformer

目录 什么是 Transformer&#xff1f; Encoder Decoder Attention Self-Attention Context-Attention 什么是 Transformer&#xff08;微软研究院笨笨&#xff09; RNN和Transformer区别 Universal Transformer和Transformer 区别 什么是 Transformer&#xff1f; ​ …...

免费开源跨平台视频下载器 支持数百站点视频和音频下载-ytDownloader

ytDownloader&#xff1a; ytDownloader是一款免费开源跨平台视频下载器&#xff0c;帮助用户从数百个网站下载不同格式的视频和提取音频&#xff0c;使用简单&#xff0c;复制视频链接粘贴即可下载&#xff0c;支持4K画质视频下载&#xff0c;支持Linux、Windows 和 macOS平台…...

R包开发1:RStudio 与 GitHub建立连接

目录 1.安装Git 2-配置Git&#xff08;只需配置一次&#xff09; 3-用SSH连接GitHub(只需配置一次) 4-创建Github远程仓库 5-克隆仓库到本地 目标&#xff1a;创建的R包&#xff0c;包含Git版本控制&#xff0c;并且能在远程Github仓库同步&#xff0c;相当于发布在Github。…...

红蓝攻防:浅谈削弱WindowsDefender的各种方式

前言 随着数字技术的日益进步&#xff0c;我们的生活、工作和娱乐越来越依赖于计算机和网络系统。然而&#xff0c;与此同时&#xff0c;恶意软件也日趋猖獗&#xff0c;寻求窃取信息、破坏系统或仅仅为了展现其能力。微软Windows&#xff0c;作为世界上最流行的操作系统&…...

什么是响应式设计(Responsive Design)?如何实现一个响应式网页?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式设计&#xff08;Responsive Design&#xff09;⭐ 如何实现一个响应式网页&#xff1f;1. 弹性网格布局2. 媒体查询3. 弹性图像和媒体4. 流式布局5. 优化导航6. 测试和调整7. 图片优化8. 字体优化9. 渐进增强10. 面向移动优先11. …...

QT之应用程序执行脚本

简介 ● Qt中的类QProcess支持在程序中另外开辟线程 ● 其中start方法支持以字符串为参数执行命令 以Linux平台为例&#xff1a; 方式一&#xff08;后台执行&#xff09; /// /// \brief MainWindow::cmdLine run a linux command with string format in the bash /// \pa…...

学习文档链接

SpringBoot Activiti 完美结合&#xff0c;快速实现工作流&#xff08;最详细版&#xff09; - 知乎 (zhihu.com) easypoi: POI 工具类,Excel的快速导入导出,Excel模板导出,Word模板导出,可以仅仅5行代码就可以完成Excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得…...

【Java 高阶】一文精通 Spring MVC - 转换器(五)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…...

【HSPCIE仿真】输入网表文件(1)基本内容和基本规则

输入网表文件 1. 输入网表文件基本内容2. 输入网表文件示例3. 一些基本规则4. 数值表示5. 压缩文件格式的读取6. 参数和表达式 从HSPICE的仿真流程看&#xff0c;出去初始化配置过程&#xff0c;真正的仿真是从输入网表文件开始的。 HSPICE 根据输入网表文件&#xff08; inpu…...

IBM Db2 笔记

目录 1. IBM Db2 笔记1.1. 常用命令1.2. 登录命令行模式 (Using the Db2 command line processor)1.3. issue1.3.1. db2: command not found/SQL10007N Message "-1390" could not be retreived. Reason code: "3".1.3.2. db2 修改 dbm cfg 的时候报 SQL50…...

【Cortex-M3权威指南】学习笔记2 - 指令集

目录 指令集汇编语言基础UAL 近距离检视指令数据传输数据处理子程呼叫与无条件跳转指令标志位与条件转移指令隔离指令饱和运算 CM3 中新引入指令MRS\MSRIF-THENCBZ/CBNZSDIV/UDIVREV RBITSXTBTBB,TBH 指令集 汇编语言基础 一条简单的汇编指令格式&#xff08;注释使用一个分号…...

开源项目remote2mac:用Windows远程桌面无缝控制macOS

1. 项目概述&#xff1a;远程桌面连接的另一条路如果你是一名需要在Windows电脑上远程控制macOS设备的开发者、设计师或者运维人员&#xff0c;那么“远程桌面”这个需求对你来说一定不陌生。传统的方案&#xff0c;比如微软的RDP&#xff08;远程桌面协议&#xff09;对Window…...

基于GAN的端到端ISP:用AI学习从RAW到RGB的图像处理革命

1. 项目概述&#xff1a;从“拍”到“算”的ISP革命在计算机视觉和图像处理领域&#xff0c;图像信号处理器&#xff08;ISP&#xff09;一直扮演着“幕后英雄”的角色。它负责将相机传感器捕捉到的原始、未经处理的RAW Bayer数据&#xff0c;转换为我们手机相册里那些色彩鲜艳…...

为Claude Code配置Taotoken解决封号与Token不足困扰

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code配置Taotoken解决封号与Token不足困扰 应用场景类&#xff0c;针对频繁使用Claude Code作为编程助手但受限于官方限制…...

群晖NAS进阶指南:借助Docker容器部署全能DDNS服务,实现多平台域名与公网IP智能同步

1. 为什么需要全能DDNS服务&#xff1f; 家里有群晖NAS的朋友可能都遇到过这样的烦恼&#xff1a;明明设置了外网访问&#xff0c;但过几天就失效了。这是因为大多数家庭宽带分配的都是动态公网IP&#xff0c;运营商会定期更换你的IP地址。想象一下&#xff0c;这就像你的手机…...

大数据量存储终极指南:10个高效数据分片技巧

大数据量存储终极指南&#xff1a;10个高效数据分片技巧 【免费下载链接】til :memo: Today I Learned 项目地址: https://gitcode.com/gh_mirrors/ti/til 在当今数据爆炸的时代&#xff0c;高效处理和存储海量数据已成为企业技术架构的核心挑战。数据分片作为一种关键的…...

oh-my-prompt:模块化、高性能的终端提示符配置方案

1. 项目概述&#xff1a;一个为现代开发者量身打造的终端提示符如果你和我一样&#xff0c;每天有超过一半的工作时间是在终端&#xff08;Terminal&#xff09;里度过的&#xff0c;那么终端提示符&#xff08;Prompt&#xff09;就是你最亲密的“工作伙伴”。它不仅仅是那个闪…...

多渠道订单数据处理自动化,落地步骤与ERP打通方案 | 2026企业级智能体实战手册

在2026年的数字化转型深水区&#xff0c;企业面临的不再是“是否要自动化”的问题&#xff0c; 而是如何在高并发、多维度的全渠道业务压力下&#xff0c; 实现订单流、资金流与信息流的绝对同步。 传统的OMS&#xff08;订单管理系统&#xff09;与ERP&#xff08;企业资源计划…...

别再乱点JIRA后台了!手把手教你配置项目专属的创建/编辑界面(附避坑清单)

别再乱点JIRA后台了&#xff01;手把手教你配置项目专属的创建/编辑界面&#xff08;附避坑清单&#xff09; 当团队开始使用JIRA管理敏捷开发流程时&#xff0c;默认的界面配置往往成为效率杀手。开发人员创建Bug时被无关字段干扰&#xff0c;产品经理填写用户故事时找不到必填…...

VINS-Mono在EUROC数据集上的实战评测:从轨迹精度到运行耗时,我的避坑心得

VINS-Mono在EUROC数据集上的实战评测&#xff1a;从轨迹精度到运行耗时&#xff0c;我的避坑心得 当第一次在无人机上部署VINS-Mono时&#xff0c;我盯着实时轨迹和地面真值之间逐渐拉大的偏差&#xff0c;意识到论文里的漂亮曲线背后藏着太多未言明的细节。这次评测源于一个实…...

高校食堂学生信息录入系统开发实战|从0到1搭建简易Web系统

大家好&#xff5e; 最近完成了一个适合高校课程作业、小型食堂管理使用的「大学食堂学生信息录入系统」&#xff0c;全程用纯前端技术实现&#xff0c;无需复杂后端环境&#xff0c;双击即可运行&#xff0c;今天就来分享一下开发全过程、功能细节和使用技巧&#xff0c;适合刚…...