복붙노트

[SPRING] 스프링 보안 : 4.0에서 5.0으로 마이그레이션 - 오류 - "null"id에 매핑 된 PasswordEncoder가 없음 [닫힘]

SPRING

스프링 보안 : 4.0에서 5.0으로 마이그레이션 - 오류 - "null"id에 매핑 된 PasswordEncoder가 없음 [닫힘]

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
    org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:236)
    org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:196)
    org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$LazyPasswordEncoder.matches(WebSecurityConfigurerAdapter.java:593)

내 코드가 잘 작동했다. 이제 스프링 보안 버전이 4.0에서 5.0으로 변경되었다.

해결법

  1. ==============================

    1.Java 기반의 경우 코드에서 이러한 변경을 수행하고 다음과 같이 업데이트하십시오.

    Java 기반의 경우 코드에서 이러한 변경을 수행하고 다음과 같이 업데이트하십시오.

    @Autowired
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
        BCryptPasswordEncoder encoder = passwordEncoder();
        auth.inMemoryAuthentication().withUser("admin").password(encoder.encode("admin")).roles("ADMIN");
    }
    
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    

    또는,

     @Bean
    public static NoOpPasswordEncoder passwordEncoder() {
     return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
    }
    

    XML 구성의 경우,

    <bean id ="passwordEncoder" class = "org.springframework.security.crypto.NoOpPasswordEncoder" factory-method = "getInstance" />
    
  2. ==============================

    2.그녀에게 필요한 업데이트에 대한 링크를 읽어보십시오.

    그녀에게 필요한 업데이트에 대한 링크를 읽어보십시오.

    https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-storage-format.

    클래스에 암호 엔코더에 대한 bean을 추가해야 할 수도 있습니다. 다시 말해 요구 사항에 따라 다릅니다.

    예를 들어 아래의 구성 클래스에서 NoOpPasswordEncoder를 사용할 수있는 경우 : -

    @Bean
    public NoOpPasswordEncoder noopPasswordEncoder(){
        return new NoOpPasswordEncoder();
    }
    

    아래 XML 기반 구성의 경우 : -

    <bean id ="passwordEncoder" class = "org.springframework.security.crypto.NoOpPasswordEncoder" factory-method = "getInstance" />
    
  3. from https://stackoverflow.com/questions/49609768/spring-security-migrating-4-0-to-5-0-error-there-is-no-passwordencoder-mapp by cc-by-sa and MIT license