标签分类
技术文章
当前位置:主页 > 计算机编程 > java > Spring Security5默认密码编码器浅析

Spring Security5中默认密码编码器详解

  • 发布时间:
  • 作者:码农之家原创
  • 点击:196

Spring Security5默认密码编码器浅析

这篇文章主要知识点是关于spring,security,密码编码器,spring,security,编辑器,Spring Security5默认密码编码器浅析,的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

深入理解Spring Cloud与微服务构建
  • 类型:微服务大小:173.49 MB格式:PDF出版:人民邮电出版社作者:方志朋
立即下载

更多相关的学习资源可以参阅 程序设计电子书Python电子书、等栏目。

1.概述

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

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

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

2. Spring Security 4

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

@Configuration
public 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配置我们的用户:

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

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

4.结论

在这个快速示例中,我们使用新的密码存储机制将有效的Spring 4内存中认证配置更新到Spring 5。

与往常一样,您可以在GitHub项目中找到源代码。

总结

以上所述是小编给大家介绍的Spring Security 5中默认密码编码器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到儿童python编程入门书籍推、 vue项目中使用md5加密以及、 解决axios.interceptors.respon、 等java文章进一步学习,感谢大家的阅读和支持。

上一篇:java动态静态代理原理实例代码

下一篇:java中ThreadPoolExecutor知识点总结

展开 +

收起 -

学习笔记
网友NO.622097

SpringBoot+Security 发送短信验证码的实现

在core模块下properties包中创建SmsCodeProperties 在ValidateCodeProperties中new一个SmsCodeProperties对象,并实现getter、setter方法 在core模块下validate包中创建SmsCodeGenerator实现ValidateCodeGenerator接口 创建SmsCodeSender接口,定义发送短信的抽象方法 实现SmsCodeSender接口 在ValidateCodeBeanConfig中把SmsCodeSenderImpl注入到容器中 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。 ……

网友NO.572055

自定义Spring Security的身份验证失败处理方法

1.概述 在本快速教程中,我们将演示如何在Spring Boot应用程序中自定义Spring Security的身份验证失败处理。目标是使用表单登录方法对用户进行身份验证。 2.认证和授权(Authentication and Authorization) 身份验证和授权通常结合使用,因为它们在授予系统访问权限时起着重要且同样重要的作用。 但是,它们具有不同的含义,并在验证请求时应用不同的约束: 身份验证 - 在授权之前;它是关于验证收到的凭证;我们验证用户名和密码是否与我们的应用程序识别的用户名和密码相匹配 授权 - 用于验证成功通过身份验证的用户是否有权访问应用程序的某个功能 我们可以自定义身份验证和授权失败处理,但是,在此应用程序中,我们将专注于身份验证失败。 3. Spring Security的AuthenticationFailureHandler Spring Security提供了一个默认处理身份验证失败的组件。 但是,我们发现于默认行为不足以满足实际要求的情况是很常见的。 如果是这种情况,我们可以创建自己的组件并通过实现AuthenticationFailureHandler接口提供我们想要的自定义行为: public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler { private ObjectMapper objectMapper = new ObjectMapper(); @Override public void onAuthenticationFailure( HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) ……

网友NO.809661

spring security4 添加验证码的示例代码

spring security是一个很大的模块,本文中只涉及到了自定义参数的认证。spring security默认的验证参数只有username和password,一般来说都是不够用的。由于时间过太久,有些忘,可能有少许遗漏。好了,不废话。 spring以及spring security配置采用javaConfig,版本依次为4.2.5,4.0.4 总体思路:自定义EntryPoint,添加自定义参数扩展AuthenticationToken以及AuthenticationProvider进行验证。 首先定义EntryPoint: import org.springframework.security.core.AuthenticationException;import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class MyAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint { public MyAuthenticationEntryPoint(String loginFormUrl) { super(loginFormUrl); } @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { super.commence(request, response, authException); }} 接下来是token,validCode是验证码参数: import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;public class MyUsernamePasswordAuthenticationToken extends UsernamePasswordAuthenticationToken { private String validCode; public MyUsernamePasswordAuthenticationToke……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明