[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D7WFHTDASGT7V91RT1HT5N":3,"skill-same:01M6D7WFHTDASGT7V91RT1HT5N":62},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M6D7WFHTDASGT7V91RT1HT5N","springboot-security",null,"Spring Security best practices for authn\u002Fauthz, validation, CSRF, secrets, headers, rate limiting, and dependency security in Java Spring Boot services.","oabdelmaksoud\u002FSuperClaw","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D5CW1RHNSKCJR85GJACBFT",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fja-JP\u002Fskills\u002Fspringboot-security\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"security","springboot security","boot","best practices","validation","security best practices","java","spring boot","services","csrf","secrets","spring","dependency","java spring","rate limiting","2026-11-10 10:12:30",false,"---\nname: springboot-security\ndescription: Spring Security best practices for authn\u002Fauthz, validation, CSRF, secrets, headers, rate limiting, and dependency security in Java Spring Boot services.\n---\n\n# Spring Boot セキュリティレビュー\n\n認証の追加、入力処理、エンドポイント作成、またはシークレット処理時に使用します。\n\n## 認証\n\n- ステートレスJWTまたは失効リスト付き不透明トークンを優先\n- セッションには `httpOnly`、`Secure`、`SameSite=Strict` クッキーを使用\n- `OncePerRequestFilter` またはリソースサーバーでトークンを検証\n\n```java\n@Component\npublic class JwtAuthFilter extends OncePerRequestFilter {\n  private final JwtService jwtService;\n\n  public JwtAuthFilter(JwtService jwtService) {\n    this.jwtService = jwtService;\n  }\n\n  @Override\n  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,\n      FilterChain chain) throws ServletException, IOException {\n    String header = request.getHeader(HttpHeaders.AUTHORIZATION);\n    if (header != null && header.startsWith(\"Bearer \")) {\n      String token = header.substring(7);\n      Authentication auth = jwtService.authenticate(token);\n      SecurityContextHolder.getContext().setAuthentication(auth);\n    }\n    chain.doFilter(request, response);\n  }\n}\n```\n\n## 認可\n\n- メソッドセキュリティを有効化: `@EnableMethodSecurity`\n- `@PreAuthorize(\"hasRole('ADMIN')\")` または `@PreAuthorize(\"@authz.canEdit(#id)\")` を使用\n- デフォルトで拒否し、必要なスコープのみ公開\n\n## 入力検証\n\n- `@Valid` を使用してコントローラーでBean Validationを使用\n- DTOに制約を適用: `@NotBlank`、`@Email`、`@Size`、カスタムバリデーター\n- レンダリング前にホワイトリストでHTMLをサニタイズ\n\n## SQLインジェクション防止\n\n- Spring Dataリポジトリまたはパラメータ化クエリを使用\n- ネイティブクエリには `:param` バインディングを使用し、文字列を連結しない\n\n## CSRF保護\n\n- ブラウザセッションアプリの場合はCSRFを有効にし、フォーム\u002Fヘッダーにトークンを含める\n- Bearerトークンを使用する純粋なAPIの場合は、CSRFを無効にしてステートレス認証に依存\n\n```java\nhttp\n  .csrf(csrf -> csrf.disable())\n  .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS));\n```\n\n## シークレット管理\n\n- ソースコードにシークレットを含めない。環境変数またはvaultから読み込む\n- `application.yml` を認証情報から解放し、プレースホルダーを使用\n- トークンとDB認証情報を定期的にローテーション\n\n## セキュリティヘッダー\n\n```java\nhttp\n  .headers(headers -> headers\n    .contentSecurityPolicy(csp -> csp\n      .policyDirectives(\"default-src 'self'\"))\n    .frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)\n    .xssProtection(Customizer.withDefaults())\n    .referrerPolicy(rp -> rp.policy(ReferrerPolicyHeaderWriter.ReferrerPolicy.NO_REFERRER)));\n```\n\n## レート制限\n\n- 高コストなエンドポイントにBucket4jまたはゲートウェイレベルの制限を適用\n- バーストをログに記録してアラートを送信し、リトライヒント付きで429を返す\n\n## 依存関係のセキュリティ\n\n- CIでOWASP Dependency Check \u002F Snykを実行\n- Spring BootとSpring Securityをサポートされているバージョンに保つ\n- 既知のCVEでビルドを失敗させる\n\n## ロギングとPII\n\n- シークレット、トークン、パスワード、完全なPANデータをログに記録しない\n- 機密フィールドを編集し、構造化JSONロギングを使用\n\n## ファイルアップロード\n\n- サイズ、コンテンツタイプ、拡張子を検証\n- Webルート外に保存し、必要に応じてスキャン\n\n## リリース前チェックリスト\n\n- [ ] 認証トークンが正しく検証され、期限切れになっている\n- [ ] すべての機密パスに認可ガードがある\n- [ ] すべての入力が検証およびサニタイズされている\n- [ ] 文字列連結されたSQLがない\n- [ ] アプリケーションタイプに対してCSRF対策が正しい\n- [ ] シークレットが外部化され、コミットされていない\n- [ ] セキュリティヘッダーが設定されている\n- [ ] APIにレート制限がある\n- [ ] 依存関係がスキャンされ、最新である\n- [ ] ログに機密データがない\n\n**注意**: デフォルトで拒否し、入力を検証し、最小権限を適用し、設定によるセキュリティを優先します。\n","# Spring Boot セキュリティレビュー\n\n認証の追加、入力処理、エンドポイント作成、またはシークレット処理時に使用します。\n\n## 認証\n\n- ステートレスJWTまたは失効リスト付き不透明トークンを優先\n- セッションには `httpOnly`、`Secure`、`SameSite=Strict` クッキーを使用\n- `OncePerRequestFilter` またはリソースサーバーでトークンを検証\n\n```java\n@Component\npublic class JwtAuthFilter extends OncePerRequestFilter {\n  private final JwtService jwtService;\n\n  public JwtAuthFilter(JwtService jwtService) {\n    this.jwtService = jwtService;\n  }\n\n  @Override\n  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,\n      FilterChain chain) throws ServletException, IOException {\n    String header = request.getHeader(HttpHeaders.AUTHORIZATION);\n    if (header != null && header.startsWith(\"Bearer \")) {\n      String token = header.substring(7);\n      Authentication auth = jwtService.authenticate(token);\n      SecurityContextHolder.getContext().setAuthentication(auth);\n    }\n    chain.doFilter(request, response);\n  }\n}\n```\n\n## 認可\n\n- メソッドセキュリティを有効化: `@EnableMethodSecurity`\n- `@PreAuthorize(\"hasRole('ADMIN')\")` または `@PreAuthorize(\"@authz.canEdit(#id)\")` を使用\n- デフォルトで拒否し、必要なスコープのみ公開\n\n## 入力検証\n\n- `@Valid` を使用してコントローラーでBean Validationを使用\n- DTOに制約を適用: `@NotBlank`、`@Email`、`@Size`、カスタムバリデーター\n- レンダリング前にホワイトリストでHTMLをサニタイズ\n\n## SQLインジェクション防止\n\n- Spring Dataリポジトリまたはパラメータ化クエリを使用\n- ネイティブクエリには `:param` バインディングを使用し、文字列を連結しない\n\n## CSRF保護\n\n- ブラウザセッションアプリの場合はCSRFを有効にし、フォーム\u002Fヘッダーにトークンを含める\n- Bearerトークンを使用する純粋なAPIの場合は、CSRFを無効にしてステートレス認証に依存\n\n```java\nhttp\n  .csrf(csrf -> csrf.disable())\n  .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS));\n```\n\n## シークレット管理\n\n- ソースコードにシークレットを含めない。環境変数またはvaultから読み込む\n- `application.yml` を認証情報から解放し、プレースホルダーを使用\n- トークンとDB認証情報を定期的にローテーション\n\n## セキュリティヘッダー\n\n```java\nhttp\n  .headers(headers -> headers\n    .contentSecurityPolicy(csp -> csp\n      .policyDirectives(\"default-src 'self'\"))\n    .frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)\n    .xssProtection(Customizer.withDefaults())\n    .referrerPolicy(rp -> rp.policy(ReferrerPolicyHeaderWriter.ReferrerPolicy.NO_REFERRER)));\n```\n\n## レート制限\n\n- 高コストなエンドポイントにBucket4jまたはゲートウェイレベルの制限を適用\n- バーストをログに記録してアラートを送信し、リトライヒント付きで429を返す\n\n## 依存関係のセキュリティ\n\n- CIでOWASP Dependency Check \u002F Snykを実行\n- Spring BootとSpring Securityをサポートされているバージョンに保つ\n- 既知のCVEでビルドを失敗させる\n\n## ロギングとPII\n\n- シークレット、トークン、パスワード、完全なPANデータをログに記録しない\n- 機密フィールドを編集し、構造化JSONロギングを使用\n\n## ファイルアップロード\n\n- サイズ、コンテンツタイプ、拡張子を検証\n- Webルート外に保存し、必要に応じてスキャン\n\n## リリース前チェックリスト\n\n- [ ] 認証トークンが正しく検証され、期限切れになっている\n- [ ] すべての機密パスに認可ガードがある\n- [ ] すべての入力が検証およびサニタイズされている\n- [ ] 文字列連結されたSQLがない\n- [ ] アプリケーションタイプに対してCSRF対策が正しい\n- [ ] シークレットが外部化され、コミットされていない\n- [ ] セキュリティヘッダーが設定されている\n- [ ] APIにレート制限がある\n- [ ] 依存関係がスキャンされ、最新である\n- [ ] ログに機密データがない\n\n**注意**: デフォルトで拒否し、入力を検証し、最小権限を適用し、設定によるセキュリティを優先します。\n",{"name":5,"description":7},"main","7b610356e36623652299fa2acb477ff821b1d920","upstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fja-JP\u002Fskills\u002Fspringboot-security",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:12:53",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add oabdelmaksoud\u002FSuperClaw --skill springboot-security",{"tool":54,"command":55},"bunx","bunx skills add oabdelmaksoud\u002FSuperClaw --skill springboot-security",{"tool":57,"command":58},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FSuperClaw --skill springboot-security","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fja-JP\u002Fskills\u002Fspringboot-security\u002FSKILL.md",true,[],[63,84,98,129,154,172],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":74,"publishedAt":34},"01M6D88QCPTBZVCRED0NZ1Y8K8","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[69],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[75,76,77,78,79,80,81,82,83],"translate","doc","visa doc translate","translation","application","create","images","PDF","documents",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":34},"01M6D88NBM95T3TFM50CYYAP65","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[91,92,93,94,95,96,97],"verification","loop","verification loop","sessions","code","claude code sessions","system",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":115,"publishedAt":34},"01M6D88JFZ2P996GVRHJNSZSTM","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[104,107,110],{"categoryNo":105,"categoryName":106,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":108,"categoryName":109,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":111,"categoryName":112,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[116,117,118,119,120,121,95,122,123,124,125,126,127,128],"tdd","workflow","tdd workflow","e2e tests","e2e","integration","development","use","test","refactoring","coverage","tests","writing",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":34},"01M6D88FTHRRSVJMXF2G7MQAK3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[136,137,138,139,140,141,142,22,143,144,145,146,147,148,149,150,151,152,153],"patterns","swiftui","swiftui patterns","architecture","macos","performance","state management","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":34},"01M6D88D527QTQT9DKHTRFN6EA","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[160],{"categoryNo":105,"categoryName":106,"taxonomyType":72,"taxonomyTypeDesc":73},[162,163,164,165,95,166,167,168,169,97,31,170,171],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","swift testing","dependency injection",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":34},"01M6D88AJW8H2QNWSW5ZY82R43","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[179,180,164,181,182,39],"concurrency","swift concurrency","swift concurrency 6 2","default"]