【问题标题】:Spring security : migrating 4.0 to 5.0 - Error -There is no PasswordEncoder mapped for the id “null” [closed]Spring security:将 4.0 迁移到 5.0 - 错误 - 没有为 id “null”映射 PasswordEncoder [关闭]
【发布时间】:2018-09-11 13:57:05
【问题描述】:
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)

我的代码运行良好,现在我已将 spring security 版本从 4.0 更改为 5.0,但它无法运行

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    请仔细阅读此处的链接,了解您需要为此执行的更新:-

    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" />
    

    【讨论】:

      【解决方案2】:

      对于基于 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" />
      

      【讨论】:

        猜你喜欢
        • 2020-10-27
        • 2018-09-14
        • 2020-08-11
        • 2020-07-03
        • 2018-10-30
        • 2019-06-02
        • 2021-06-02
        • 2018-11-14
        相关资源
        最近更新 更多