SpringSecurity5,passwordEncoder id 为NULL问题解决

按照SpringSecurity5的文档写的一个小程序,遇到一点问题。
遇到一下报错:

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

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/css/**", "/index").permitAll()       
                .antMatchers("/user/**").hasRole("USER")            
                .and()
            .formLogin()
                .loginPage("/login").failureUrl("/login-error");    
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }
}

这是官方文档的写法,按照这样运行会出错,后面查了一下,是因为在SpringSecurity5已经默认需要对密码进行加密,因此不能再使用这种明文的写法

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
//        auth
//                .inMemoryAuthentication()
//                .withUser("jack").password("123456").roles("USER");
        User.UserBuilder users = User.withDefaultPasswordEncoder();
        UserDetails jack = users.username("jack").password("123456").roles("USER").build();
        auth.inMemoryAuthentication().withUser(jack);

    }

这样就可以正确运行了
这个问题的解释:
https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-encoding
官方文档发现问题的地方:
https://docs.spring.io/spring-security/site/docs/5.0.13.BUILD-SNAPSHOT/guides/html5/helloworld-boot.html

你可能感兴趣的:(SpringSecurity5,passwordEncoder id 为NULL问题解决)