ページ内ナビ
概要
Spring Securityは、Springアプリへ認証とアクセス制御を組み込むためのフレームワークです。リクエストをFilterの連鎖で処理し、誰がどの機能を利用できるかをアプリの設定として表現できます。
特徴と向いている用途
公式資料に基づく紹介・実機未検証 · 内容確認日:
主な特徴
向いている用途
導入前の確認
参考にした公式資料
- [1]Spring Security README at commit 1b17ecd(2026-10-04)
- [2]Spring Security 7.1.1 release(2026-10-04)
- [3]Spring Security servlet architecture reference(2026-10-04)
- [4]Spring Security username/password reference(2026-10-04)
- [5]Spring Boot 4.1.1 release(2026-10-04)
- [6]Spring Boot system requirements(2026-10-04)
- [7]Spring Security Apache License at commit 1b17ecd(2026-10-04)
- [8]Spring Security GitHub repository metadata(2026-10-04)
- [9]Spring Boot 4.1 Maven plugin executable archive packaging(2026-10-04)
編集部からの補足
Springアプリの公開範囲をコードで明確にし、認証方式を段階的に導入したいチームに向く基盤です。最小例の固定利用者はlocalhostで通信経路を確認するためだけに使い、本番ではID基盤、パスワード保存、CSRF、セッション方針を設計してください。
3ステップで試す
- 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
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
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" )
成長
成長の推移 · 直近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で投稿できます。管理者が承認した後に公開されます。
あわせて探訪
- SuperTokens Core15,333 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
Frontend/Backend SDKから呼ぶ認証・session・user data処理をHTTP serviceとしてself-hostするauth core
Java - Auth.js28,368 Stars
共通タグ 2件 · 共通カテゴリ 1件
OAuth/OIDC・passwordless・WebAuthn・stateless/database sessionをWeb標準API中心のpackage群で構成する
TypeScript - Devise24,355 Stars
共通タグ 2件 · 共通カテゴリ 1件
Wardenを基盤にRails authenticationをmodule単位で組み立てるauthentication framework
Ruby - Cosmos Server6,174 Stars
共通タグ 2件 · 共通カテゴリ 1件
自宅サーバーのアプリ公開、認証、保護、バックアップをまとめて管理する
Go - Passbolt6,147 Stars
共通タグ 2件 · 共通カテゴリ 1件
user-owned keyとend-to-end encryptionでteam credentialを安全に共有・監査する
PHP - SPIRE2,569 Stars
共通タグ 2件 · 共通カテゴリ 1件
実行中のワークロードを検証し、SPIFFE IDに結び付く短命なSVID資格情報を発行する
Go
情報の誤りを報告
掲載内容に誤りや古い情報があればお知らせください。