当前位置: 首页 > 图灵资讯 > 技术篇> spring securityjava.lang.IllegalArgumentException: There is no PasswordEncod

spring securityjava.lang.IllegalArgumentException: There is no PasswordEncod

来源:图灵教育
时间:2023-07-30 09:34:44

Spring Security实现密码加密介绍

在开发Web应用程序时,安全是一个重要的考虑因素。Spring Security是一个强大的安全框架,它为保护应用程序提供了一种简单和定制的方法。其中一个重要的功能是密码加密,以确保用户的密码在存储和传输过程中保密。

本文将介绍如何使用Spring 实现密码加密的Security。我们将引导一个刚刚进入这个行业的开发者,教他如何解决一个常见的错误。”java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"”。

整体流程

以下是实现密码加密的整体过程:

步骤描述添加Spring Security依赖于2配置Spring Security3创建自定义Passwordencoder4,使用自定义Passwordencoderderder4

接下来,我们将逐步解释每个步骤应该做什么,并提供相应的代码示例。

步骤1:添加Spring 依赖Security

首先,我们需要在项目构建文件中添加Spring 依赖Security。如果使用Maven,可以在pomm.以下依赖添加到xml文件中:

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

这将自动下载并导入所需的Spring Security库。

步骤2:配置Spring Security

接下来,我们需要配置Spring Security。Spring Boot应用程序可以在application中使用.properties或application.在yml文件中添加以下配置:

spring.security.user.name=adminspring.security.user.password=your_passwordspring.security.user.roles=ROLE_USER

这将创建具有指定用户名、密码和角色的默认用户。

步骤3:创建自定义Paswordencoderder

现在,我们将实现一个自定义的Paswordencoder来解决“java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"”错误。我们可以创建一个叫做CustomPaswordencoder的类别来完成这个任务。

import org.springframework.security.crypto.password.PasswordEncoder;public class CustomPasswordEncoder implements PasswordEncoder {    @Override    public String encode(CharSequence rawPassword) {        // 密码加密算法在这里实现,例如,使用BCryptpaswordencoderder        // 返回加密后的密码    }    @Override    public boolean matches(CharSequence rawPassword, String encodedPassword) {        // 在这里实现密码匹配算法,例如使用BCryptpaswordencoder        // 返回密码是否匹配布尔值    }}

在encode()方法中,我们可以使用适当的密码加密算法来加密原始密码,并返回加密后的密码。在matches()方法中,我们可以使用相同的加密算法来检查原始密码是否与加密密码匹配。

步骤4:使用自定义Paswordencoder

最后,我们需要Spring 我们自定义的Passwordencoder用于Security配置。我们可以创建一个叫做Securityconfig的类别来完成这个任务。

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.crypto.password.PasswordEncoder;@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Autowired    private PasswordEncoder passwordEncoder;    @Override    protected void configure(AuthenticationManagerBuilder auth) throws Exception {        auth            .inMemoryAuthentication()                .passwordEncoder(passwordEncoder)                .withUser("admin")                .password("your_password")                .roles("USER");    }    @Bean    public PasswordEncoder getPasswordEncoder() {        // 返回自定义的Paswordencoder        return new CustomPasswordEncoder();    }}

在上述代码中,我们使用@Autowired注释将自定义的Paswordencoder注入Securityconfig类别。在configure()方法中,我们使用paswordencoder()方法将密码加密器设置为我们自定义的paswordencoder。

总结

Spring按照上述步骤可以成功实现 Security的密码加密功能。我们介绍了整个过程,并提供了相应的代码示例。希望这篇文章能对刚入行的开发者有所帮助,解决“java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id