Spring BootでBasic認証の設定をする方法

はじめに

こんにちは、新卒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 -> {});

requestMatchersBasic認証を適用しないエンドポイントを指定し、permitAllでアクセスを許可します。

これにより、/passへはBasic認証なしでアクセスできるようになりました。

最後に

今回は、Spring BootでBasic認証の設定をする方法を紹介しました。誰かの参考になれば幸いです。

最後に、エキサイトではデザイナー、フロントエンジニア、バックエンドエンジニア、アプリエンジニアを絶賛募集しております!

興味があればぜひ連絡よろしくお願いいたします。

www.wantedly.com