私はJava spring securityであり、Spring.io tutorial guide に従いました。この一部として、WebSecurityConfig
クラスを編集しました。要求に応じ:
_@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Bean
@Override
public UserDetailsService userDetailsService() {
UserDetails user =
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
_
userDetailService()
メソッド内では、withDefaultPasswordEncoder()
を使用しますが、これはドキュメントで見られるように非推奨になりました。 withDefaultPasswordEncoder()
残念ながら、非推奨の方法を使用せずにこのチュートリアルを完了するために、これに代わるものを見つけることができませんでした。可能であれば誰かがこれに代わるものを提供できるでしょうか?
ありがとう!
note:私のエラーのスクリーンショットとグラドルファイルをいくつか添付しました
編集:古い回答を削除し、質問を誤解しました。ここに新しいものがあります:
User.withDefaultPasswordEncoder()
はまだデモに使用できます。これが非推奨であっても、それが何をしているのかを心配する必要はありませんが、本番環境では、ソースにプレーンテキストのパスワードを使用しないでください。コード。
現在のuserDetailsService()
メソッドを使用する代わりに行うべきことは、 following です。
_private static final String ENCODED_PASSWORD = "$2a$10$AIUufK8g6EFhBcumRRV2L.AQNz3Bjp7oDQVFiO5JJMBFZQ6x2/R/2";
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("user").password(ENCODED_PASSWORD).roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
_
ここで、_ENCODED_PASSWORD
_はBCryptでエンコードされた_secret123
_です。 passwordEncoder().encode("secret123")
のようにプログラムでエンコードすることもできます。
そうすれば、コードをパブリックリポジトリにプッシュしても、_ENCODED_PASSWORD
_はパスワードのエンコードされたバージョンのみを表示し、プレーンテキストバージョンは表示しないため、パスワードはわかりませんが、_$2a$10$AIUufK8g6EFhBcumRRV2L.AQNz3Bjp7oDQVFiO5JJMBFZQ6x2/R/2
_は実際には文字列_secret123
_のエンコードされたパスワードですが、他の人はそうではありませんが、資格情報_user:secret123
_を持つメモリ内ユーザーは危険にさらされません。
例のために静的変数に残して使用していることに注意してください。
PasswordEncoder.encode()の使用は次のようになります
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("user")
.password(passwordEncoder().encode("miClave"))
.roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}