mcpField
S
spring-security

spring-security

github.com/partme-aiセキュリティ71693 回インストール3 週間前に更新
リポジトリ

spring-security について

spring-securityは、Spring Bootアプリケーションの認証と認可を設定するスキルです。JWT、OAuth2、メソッド単位のアクセス制御、Webセキュリティ設定などの一般的なパターンを扱います。

主な機能

  1. 01SecurityFilterChainのアクセスルール設定
  2. 02UserDetailsServiceによる認証の実装
  3. 03JWTとOAuth2のセキュリティ設定
  4. 04メソッド単位の認可
  5. 05CORS、CSRF、セキュリティヘッダーの設定

活用シーン

  1. 01Spring Bootアプリケーションのエンドポイント保護
  2. 02JWTによるステートレス認証の追加
  3. 03ロールによるサービスメソッドの制限
  4. 04ブラウザーとAPIのセキュリティ方針設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/partme-ai/full-stack-skills --skill spring-security

インストール後、Claude Code で/spring-securityを入力して読み込まれたか確認します。

同梱ファイルLICENSE.txt

詳細

このスキルを使用する場面

次のような要望がある場合に、このスキルを使用してください。

  • Spring Boot アプリケーションで認証と認可を設定する
  • SecurityFilterChain、UserDetailsService、PasswordEncoder をセットアップする
  • JWT ベースのステートレス認証を実装する
  • OAuth2 クライアントまたはリソースサーバーを統合する
  • @PreAuthorize と @Secured によるメソッドレベルのセキュリティを使用する
  • CORS、CSRF、セッション管理、セキュリティヘッダーを設定する

このスキルの使用方法

ワークフロー
  1. Spring Security スターターの依存関係を追加します
  2. SecurityFilterChain を設定して、URL ベースのアクセスルールを定義します
  3. 認証を実装します。インメモリ、JDBC、LDAP、またはカスタムの UserDetailsService を使用します
  4. 認可を追加します。ロールベースまたは式ベースのアクセス制御を使用します
1. 基本的なセキュリティ設定
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/public/**").permitAll()
                .requestMatchers("/api/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .httpBasic(Customizer.withDefaults());
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
2. カスタム UserDetailsService
@Service
public class CustomUserDetailsService implements UserDetailsService {
    private final UserRepository userRepository;

    public CustomUserDetailsService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String username) {
        User user = userRepository.findByUsername(username)
            .orElseThrow(() -> new UsernameNotFoundException("User not found: " + username));
        return new org.springframework.security.core.userdetails.User(
            user.getUsername(), user.getPassword(), user.getAuthorities()
        );
    }
}
3. JWT 認証フィルター
@Component
public class JwtAuthFilter extends OncePerRequestFilter {
    private final JwtService jwtService;
    private final UserDetailsService userDetailsService;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        String token = extractToken(request);
        if (token != null && jwtService.isValid(token)) {
            String username = jwtService.extractUsername(token);
            UserDetails userDetails = userDetailsService.loadUserByUsername(username);
            var authToken = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
            SecurityContextHolder.getContext().setAuthentication(authToken);
        }
        chain.doFilter(request, response);
    }
}
4. メソッドレベルのセキュリティ
@EnableMethodSecurity
@Configuration
public class MethodSecurityConfig {}

@Service
public class AdminService {
    @PreAuthorize("hasRole('ADMIN')")
    public void deleteUser(Long id) { /* ... */ }

    @PreAuthorize("#userId == authentication.principal.id")
    public UserProfile getProfile(Long userId) { /* ... */ }
}

ベストプラクティス

  • パスワードは必ず BCrypt または Argon2 でエンコードし、平文のパスワードは決して保存しないでください
  • 本番環境では HTTPS を使用し、セキュリティヘッダー(HSTS、X-Content-Type-Options)を設定してください
  • 最小権限の原則を適用し、ロールと権限を慎重に設計してください
  • 機密性の高いエンドポイントを保護してください。ブラウザベースのアプリケーションでは CSRF 保護を使用してください
  • API サーバーでは CORS を明示的に設定してください

リソース

キーワード

spring security, authentication, authorization, JWT, OAuth2, SecurityFilterChain, UserDetailsService, BCrypt, CORS, CSRF, method security, PreAuthorize, roles, permissions

コメント