記録の11を解決します——Spring安全とjava.lang.IllgalArgement Exception:The e e isのPassword Enters mapped for the idエラー


使用説明:
1.XバージョンのSpring-boot-starter-parentを使用しています.もしException parsing documentエラーが発生したら、通常は統合されたthymeleafとthymeleaf-layout-dialectバージョンが古いので、古いバージョンを排除して新しいバージョンに交換する必要があります.2、thymeleafと統合する場合は、pom.xmlファイルに導入する必要があります.
<dependency>
            <groupId>org.thymeleaf.extrasgroupId>
            <artifactId>thymeleaf-extras-springsecurity5artifactId>
        dependency>
;ファイルヘッダにインポート


3、Spring Securityはデフォルトで登録ページと登録ロジック処理を提供します.カスタマイズされた登録ページを使うと、login Pageを使ってカスタマイズできます.GET方法は登録ページにジャンプし、POST方法は登録処理ロジックにジャンプします.両者は同じURLを使う必要があります.
/loginpage GET        
/loginpage POST       
/loginpage?error GET           
/loginpage?logout GET            
エラー
java.lang.IllagalAgment Exception:The re isのPassword Enters mapped for the id“null”
Spring Security 5.0の前に、デフォルト値PasswordEncoderNoOpPasswordEncoderであり、テキストの純粋なパスワードが必要である.Spring Security 5では、デフォルト値はDelegatingPasswordEncoderであり、パスワード格納フォーマットが必要である.
ソリューション1:-パスワード格納フォーマットを追加し、テキストのみに{noop}を追加します.
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
     
        auth.inMemoryAuthentication()
                .withUser("user").password("{noop}password").roles("USER")
                .and()
                .withUser("admin").password("{noop}password").roles("ADMIN");

    }

}
解決策2:UserDetailsServiceのためのUser.withDefaultPasswordEncoder()の使用
@Bean
    public UserDetailsService userDetailsService() {
        //             
        //User.UserBuilder users = User.withDefaultPasswordEncoder();
        //InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
           //manager.createUser(users.username("user").password("password").roles("USER").build());
        //manager.createUser(users.username("admin").password("password").roles("USER", "ADMIN").build());
        //return manager;
        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("user1")
                .password(encoder.encode("pwd1"))
                .roles("VIP1", "VIP2").build());
        manager.createUser(User.withUsername("user2")
                .password(encoder.encode("pwd2"))
                .roles("VIP3", "VIP2").build());
        return manager;
    }
参考文献:https://www.thymeleaf.org/doc/articles/springsecurity.html
データベースのパスワード検証の例を追加します.https://juejin.im/post/5c191e425188252dcb310898
Security JWTを統合し、前後に分離認証を認証する:https://www.jianshu.com/p/ca4cebefd1cc
ソース:https://github.com/Lswx2017/securitydemo.git