OSS探訪GitHubでログイン

Springアプリの認証とアクセス制御を一つの仕組みで組み立てる

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
9,638
主要言語
Java
ライセンス
Apache-2.0
リポジトリ最終更新
2026/10/02
ページ内ナビ

概要

Spring Securityは、Springアプリへ認証とアクセス制御を組み込むためのフレームワークです。リクエストをFilterの連鎖で処理し、誰がどの機能を利用できるかをアプリの設定として表現できます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

HTTPリクエストを認証し、URLやメソッドごとにアクセスを制御する

Spring SecurityはServlet Filterの連鎖としてリクエストを処理し、認証情報をSecurityContextへ保持します。HTTP Basic、フォームログイン、OAuth 2.0などの入口と、URL・メソッド単位の認可をSpringの設定として組み合わせられます。

出典:[3][4]

向いている用途

Spring Bootサービスの公開範囲を段階的に守りたい場合に向く

公開エンドポイントとログイン必須のエンドポイントを同じアプリで明示できるため、業務APIや管理画面に認証を追加したいチームに適します。最小例では固定したデモ利用者でHTTP応答を確認し、その後に組織のID基盤や永続的な利用者管理へ置き換えられます。

出典:[4][5]

導入前の確認

認証方式、CSRF、セッション、利用者情報の運用は用途に合わせて設計する

依存関係を追加しただけで本番向けの認証設計が完成するわけではありません。ブラウザとAPIの違い、CSRF対策、セッション方針、パスワード保存、鍵やクライアント秘密の管理を決め、Spring Boot 4.1.1とJava 17以上の要件も確認してください。リポジトリ本体はApache-2.0です。

出典:[6][7][2]

参考にした公式資料

  1. [1]Spring Security README at commit 1b17ecd(2026-10-04)
  2. [2]Spring Security 7.1.1 release(2026-10-04)
  3. [3]Spring Security servlet architecture reference(2026-10-04)
  4. [4]Spring Security username/password reference(2026-10-04)
  5. [5]Spring Boot 4.1.1 release(2026-10-04)
  6. [6]Spring Boot system requirements(2026-10-04)
  7. [7]Spring Security Apache License at commit 1b17ecd(2026-10-04)
  8. [8]Spring Security GitHub repository metadata(2026-10-04)
  9. [9]Spring Boot 4.1 Maven plugin executable archive packaging(2026-10-04)
編集部からの補足

Springアプリの公開範囲をコードで明確にし、認証方式を段階的に導入したいチームに向く基盤です。最小例の固定利用者はlocalhostで通信経路を確認するためだけに使い、本番ではID基盤、パスワード保存、CSRF、セッション方針を設計してください。

3ステップで試す

  1. 1

    Spring Boot 4.1.1の最小アプリを作る

    Java 17以上、Maven 3.6.3以上、Python 3、curlが必要です。一時ディレクトリに公開・認証必須の2経路を持つデモを作ります。demo/demoはlocalhost限定の確認用資格情報です。

    spring_demo_dir=$(mktemp -d "${TMPDIR:-/tmp}/spring-security-demo.XXXXXX") && cd "$spring_demo_dir" && printf '%s ' '<project xmlns="http://maven.apache.org/POM/4.0.0">' '<modelVersion>4.0.0</modelVersion>' '<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>4.1.1</version><relativePath/></parent>' '<groupId>demo</groupId><artifactId>security-demo</artifactId><version>0.0.1</version>' '<properties><java.version>17</java.version></properties>' '<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency></dependencies>' '<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>' '</project>' > pom.xml
  2. 2

    Javaソースを作成してビルドする

    同じディレクトリに2経路を持つソースを作り、Spring Boot Maven Pluginのrepackageで実行可能JARを生成します。demo/demoはlocalhost限定の確認用資格情報です。

    mkdir -p src/main/java/demo && printf '%s ' 'package demo;' 'import org.springframework.boot.*;import org.springframework.boot.autoconfigure.*;import org.springframework.context.annotation.*;import org.springframework.security.config.annotation.web.builders.*;import org.springframework.security.core.userdetails.*;import org.springframework.security.provisioning.*;import org.springframework.security.web.*;import org.springframework.web.bind.annotation.*;' '@SpringBootApplication @RestController public class DemoApplication{' '@GetMapping("/public") String a(){return "public";} @GetMapping("/private") String b(){return "private";}' '@Bean SecurityFilterChain s(HttpSecurity h)throws Exception{return h.authorizeHttpRequests(a->a.requestMatchers("/public").permitAll().anyRequest().authenticated()).httpBasic(b->{}).build();}' '@Bean UserDetailsService u(){return new InMemoryUserDetailsManager(User.withUsername("demo").password("{noop}demo").roles("USER").build());}' 'public static void main(String[]a){SpringApplication.run(DemoApplication.class,a);}}' > src/main/java/demo/DemoApplication.java && mvn -q -DskipTests package
  3. 3

    localhostで認証フローを確認する

    実行可能JARを空いているlocalhostポートで直接起動し、そのPIDだけを所有します。公開200、未認証401、認証済み200を確認後、killとwaitを行い、ポート閉鎖も確認します。隔離したsubshellのため呼出元trapは保持されます。

    ( set -eu; port=$(python3 -c 'import socket; s=socket.socket(); s.bind(("127.0.0.1",0)); print(s.getsockname()[1]); s.close()'); app_pid=''; cleanup(){ if [ -n "$app_pid" ]; then kill "$app_pid" 2>/dev/null || true; wait "$app_pid" 2>/dev/null || true; fi; }; trap cleanup EXIT HUP INT TERM; java -jar target/security-demo-0.0.1.jar --server.address=127.0.0.1 --server.port="$port" > app.log 2>&1 & app_pid=$!; ready=0; i=0; while [ "$i" -lt 40 ]; do if curl --silent --max-time 1 "http://127.0.0.1:$port/public" > public.txt 2>/dev/null; then ready=1; break; fi; i=$((i+1)); sleep 0.25; done; [ "$ready" -eq 1 ]; [ "$(cat public.txt)" = public ]; code=$(curl --silent --output private-unauth.txt --write-out '%{http_code}' --max-time 2 "http://127.0.0.1:$port/private"); [ "$code" = 401 ]; [ "$(curl --silent --max-time 2 --user demo:demo "http://127.0.0.1:$port/private")" = private ]; cleanup; app_pid=''; python3 -c 'import errno,socket,sys; s=socket.socket(); s.settimeout(1); r=s.connect_ex(("127.0.0.1",int(sys.argv[1]))); raise SystemExit(0 if r==errno.ECONNREFUSED else 1)' "$port"; trap - EXIT HUP INT TERM; printf 'public=200 private_unauth=%s private_auth=200 stopped=true ' "$code" )
公式READMEで確認

成長

成長の推移 · 直近30日

9,638 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
101
Open PR
229

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • java
  • security
  • spring
  • spring-framework
  • framework
Stars
9,638
Forks
6,363
Watchers
415
Open Issues
1,278
Contributors
392
所有者種別
Organization
主要言語
Java
ライセンス
Apache-2.0
リポジトリ最終更新
2026/10/02

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?