はじめに
こんにちは、新卒2年目の岡崎です。
今回は、Spring BootでBasic認証の設定をする方法を紹介します。
環境
- Gradleのバージョン
------------------------------------------------------------ Gradle 8.11.1 ------------------------------------------------------------ Build time: 2024-11-20 16:56:46 UTC Revision: 481cb05a490e0ef9f8620f7873b83bd8a72e7c39 Kotlin: 2.0.20 Groovy: 3.0.22 Ant: Apache Ant(TM) version 1.10.14 compiled on August 16 2023 Launcher JVM: 21.0.5 (Amazon.com Inc. 21.0.5+11-LTS) OS: Mac OS X 14.7.2 aarch64
- Javaのバージョン
openjdk version "21.0.5" 2024-10-15 LTS OpenJDK Runtime Environment Corretto-21.0.5.11.1 (build 21.0.5+11-LTS) OpenJDK 64-Bit Server VM Corretto-21.0.5.11.1 (build 21.0.5+11-LTS, mixed mode, sharing)
- Spring Bootのバージョン
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.3.0)
準備
SpringSecurityを仕様するため、、build.gradleに以下の依存関係を追加します。
implementation 'org.springframework.boot:spring-boot-starter-security'
また、コントローラーを以下のように実装しました。
@RestController public class SampleController { @GetMapping("pass") public String passBasicAuth() { return "pass success!"; } @GetMapping public String basicAuth() { return "basicAuth success!"; } }
実装
まずはBasic認証を行うため、SecurityConfigクラスの実装を作成します。
@Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .anyRequest().authenticated() ) .httpBasic(basic -> {}); return http.build(); } }
ページにアクセスすると、ユーザーとパスワードの入力を求められるようになりました。
デフォルトでは、Spring Bootがユーザー名とパスワードを自動的に生成します。
任意のユーザー名とパスワード名を指定する場合は、application.yamlに以下のように実装します。
spring: security: user: name: sample # ユーザー名 password: password # パスワード
これで、指定したユーザー名とパスワードで認証できるようになります。
実際に確認してみます。
ユーザー名とパスワードを入力し、ログインボタンを押せば、無事にページの表示ができました。
特定のエンドポイントでBasic認証を不要にしたい場合は、permitAll() を使用します。
http .authorizeHttpRequests(auth -> auth // Basic認証が不要なエンドポイントを追加する .requestMatchers(HttpMethod.GET, "/pass").permitAll() .anyRequest().authenticated() ) .httpBasic(basic -> {});
requestMatchers
にBasic認証を適用しないエンドポイントを指定し、permitAll
でアクセスを許可します。
これにより、/pass
へはBasic認証なしでアクセスできるようになりました。
最後に
今回は、Spring BootでBasic認証の設定をする方法を紹介しました。誰かの参考になれば幸いです。
最後に、エキサイトではデザイナー、フロントエンジニア、バックエンドエンジニア、アプリエンジニアを絶賛募集しております!
興味があればぜひ連絡よろしくお願いいたします。