千家信息网

Spring Security5中默认密码编码器的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关Spring Security5中默认密码编码器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.概述在Spring Secu
千家信息网最后更新 2026年11月01日Spring Security5中默认密码编码器的示例分析

这篇文章将为大家详细讲解有关Spring Security5中默认密码编码器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1.概述

在Spring Security 4中,可以使用内存中身份验证以纯文本格式存储密码。

对版本5中的密码管理过程进行了重大改进,为密码编码和解码引入了更安全的默认机制。这意味着如果您的Spring应用程序以纯文本格式存储密码,升级到Spring Security 5可能会导致问题。

在这个简短的教程中,我们将描述其中一个潜在的问题,并展示该问题的解决方案。

2. Spring Security 4

我们首先展示一个标准的安全配置,它提供简单的内存中身份验证(适用于Spring 4):

@Configurationpublic class InMemoryAuthWebSecurityConfigurer  extends WebSecurityConfigurerAdapter {  @Override protected void configure(AuthenticationManagerBuilder auth)  throws Exception { auth.inMemoryAuthentication()  .withUser("spring")  .password("secret")  .roles("USER"); }  @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests()  .antMatchers("/private/**")  .authenticated()  .antMatchers("/public/**")  .permitAll()  .and()  .httpBasic(); }}

此配置定义所有/私有/映射方法的身份验证以及/ public /下所有内容的公共访问。

如果我们在Spring Security 5下使用相同的配置,我们会收到以下错误:

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"

该错误告诉我们由于没有为我们的内存中身份验证配置密码编码器,因此无法解码给定的密码。

3. Spring Security 5

我们可以通过使用PasswordEncoderFactories类定义DelegatingPasswordEncoder来解决此错误。

我们使用此编码器通过AuthenticationManagerBuilder配置我们的用户:

@Configurationpublic class InMemoryAuthWebSecurityConfigurer  extends WebSecurityConfigurerAdapter {  @Override protected void configure(AuthenticationManagerBuilder auth)  throws Exception { PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); auth.inMemoryAuthentication()  .withUser("spring")  .password(encoder.encode("secret"))  .roles("USER"); }}

现在,通过这种配置,我们使用BCrypt以以下格式存储我们的内存中密码:

{bcrypt}$2a$10$MF7hYnWLeLT66gNccBgxaONZHbrSMjlUofkp50sSpBw2PJjUqU.zS

虽然我们可以定义自己的一组密码编码器,但建议坚持使用PasswordEncoderFactories中提供的默认编码器。

3.1.迁移现有密码

我们可以通过以下方式将现有密码更新为推荐的Spring Security 5标准:

更新纯文本存储密码及其编码值:

String encoded = new BCryptPasswordEncoder().encode(plainTextPassword);

前缀散列存储的密码及其已知的编码器标识符:

{bcrypt}$2a$10$MF7hYnWLeLT66gNccBgxaONZHbrSMjlUofkp50sSpBw2PJjUqU.zS{sha256}97cde38028ad898ebc02e690819fa220e88c62e0699403e94fff291cfffaf8410849f27605abcbc0

当存储密码的编码机制未知时,请求用户更新其密码

关于"Spring Security5中默认密码编码器的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

密码 编码 编码器 存储 配置 内存 身份 验证 文本 格式 篇文章 错误 问题 更新 示例 分析 安全 内容 可以通过 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 亿人帮互联网科技有限公司 互联网是第几次科技革命的成果 北京路客互联网科技有限公司 互联网科技小贷 贷财互联网科技 华中科技大学互联网 上海亿帐通互联网科技 互联网公司会议桌创意科技软装饰 广州优美互联网科技 昭通云南众福互联网科技有限公司 中国科技创新与世界互联网大会 互联网在线教育科技创业 徐州市互联网科技有限公司 皮皮虾互联网科技有限公司 产业互联网科技服务公司 容联科技互联网电商 悟空问答互联网科技 青岛易易互联网科技 北京瑞云互联网科技有限公司 手冲咖啡和咖啡机区别 喔噻互联网科技 沃里互联网科技 成都狮子座互联网科技 玉溪互联网科技怎么选 阿里互联网科技企业 工业互联网等科技实现智能化赋能 云南省自由互联网科技有限公司 半导体行业属于互联网高科技类吗 科技和互联网行业的特点
0