環境
- Windows10
- Intelij idea
- Maven
- Spring Boot 3.0.2
- Spring Security 6.0.1
概要
この記事を参考にユーザー認証を試していたところ、import ができませんでした。(今回は1~3-2まで)Mavenのpom.xmlなどを確認しましたが、特に問題が見つからなかったため、いろいろ探したところspring securityのアップデートの結果、WebSecurityConfigurerAdapter は削除されてしまったようです。詳しくはこの記事を参照してください。
いろいろと見ましたが、ユーザー認証を行う件に関して扱っているものは古いものが多く新しいバージョンに関しては少なかったです。
結果公式の記事に代替案が載っていました。
現在のversionでユーザー認証を実現したい
@Configuration
public class SecurityConfiguration {
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
公式からコピペで一応は、似たようなものを実装可能です。しかし withDefaultPasswordEncoder() メソッドが非推奨でした。この記事にあることをまとめると、withDefaultPasswordEncoder() はもともと デモ 用かつそもそも user クラス自体もデモ用で実際には利用されない。ほかにも直接の理由として、パスワードを ソースコードに直書きはまずいよね という話みたいです。ほかにも色々と有益情報がありそうなのですが、初学者には難しい話で、理解まで至りませんでした。
そこで元から参考にしている記事に、添うような改良を加えたところこのようになりました。
package com.sample.koinu.mysqltest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration //バージョンが上がったことで必須になったようです。
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User
.withUsername("user")
.password(passwordEncoder().encode("1234"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
気が付きにくい点としては、username->withUsename に変化しているところです。今の状態ではデータベースを利用していないので、結局はソースコードに直書きのままになってしまっています。
終わりに
この後もユーザー認証に関して、バージョンの違いによる弊害がありました。このまま書き続けると、量がすごいことになっってしまう未来しかないので、いったん切らせていただきます。一つずつ解決していっているのもあって、次の更新は少し時間が掛かるかもしれないです。おすすめのサイトなどがあったら教えていただけると幸いです。