0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WebSecurityConfigurerAdapterがimportできなくなっていた

Posted at

環境

  • 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でユーザー認証を実現したい

公式-In-Memory Authentication
@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 に変化しているところです。今の状態ではデータベースを利用していないので、結局はソースコードに直書きのままになってしまっています。

終わりに

 この後もユーザー認証に関して、バージョンの違いによる弊害がありました。このまま書き続けると、量がすごいことになっってしまう未来しかないので、いったん切らせていただきます。一つずつ解決していっているのもあって、次の更新は少し時間が掛かるかもしれないです。おすすめのサイトなどがあったら教えていただけると幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?