java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id
原创
©著作权归作者所有:来自51CTO博客作者chenyanlong的原创作品,请联系作者获取转载授权,否则将追究法律责任
出现问题的原因:
内存用户验证时,Spring boot 2.0.1引用的security 依赖是 spring security 5.X版本,此版本需要提供一个PasswordEncorder的实例,否则后台汇报错误:
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
并且页面毫无响应。
解决方法:
创建PasswordEncorder的实现类MyPasswordEncoder。
代码一:
1 package com.mmall.demo;
2
3 import org.springframework.security.crypto.password.PasswordEncoder;
4
5 public class MyPasswordEncoder implements PasswordEncoder {
6 @Override
7 public String encode(CharSequence rawPassword) {
8 return rawPassword.toString();
9 }
10
11 @Override
12 public boolean matches(CharSequence rawPassword, String encodedPassword) {
13 return encodedPassword.equals(rawPassword);
14 }
15 }
View Code
代码二:
1 package com.mmall.demo;
2
3 import org.springframework.context.annotation.Configuration;
4 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
5 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
6 import org.springframework.security.config.annotation.web.builders.WebSecurity;
7 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
8 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
9
10 @Configuration
11 @EnableWebSecurity
12 public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
13
14 @Override
15 protected void configure(AuthenticationManagerBuilder auth) throws Exception {
16 auth.inMemoryAuthentication().
17 passwordEncoder(new MyPasswordEncoder()).
18 withUser("admin").password("123456").roles("ADMIN");
19 }
20
21 @Override
22 protected void configure(HttpSecurity http) throws Exception {
23 http.authorizeRequests()
24 .antMatchers("/").permitAll()
25 .anyRequest().authenticated()
26 .and()
27 .logout().permitAll()
28 .and()
29 .formLogin();
30 http.csrf().disable();
31 }
32
33 @Override
34 public void configure(WebSecurity web) throws Exception {
35 web.ignoring().antMatchers("/js/**","/css/**","/image/**");
36 }
37
38
39 }
View Code