Skip to content

Everything Claude Code 的 springboot-security Skill 是一套专为 Java Spring Boot 服务设计的安全最佳实践自动审查与建议工具。它涵盖认证(authn)、授权(authz)、输入校验、CSRF、防爆破速率限制、依赖安全扫描、敏感信息管理等关键环节。Skill 可在添加认证、处理输入、创建 API 端点或管理密钥等场景下自动触发,协同 Agent 实现端到端安全保障。本文将详细介绍其激活时机、完整使用流程、输出示例及与其他 Skill/Agent 的协作模式,帮助你在 AI 辅助开发中系统提升 Spring Boot 项目的安全性。

Everything Claude Code Spring Boot Security Skill:authn/authz、CSRF、速率限制与依赖安全最佳实践

在现代 Java Spring Boot 项目中,安全问题贯穿从认证、授权到依赖管理的每一个细节。Everything Claude Code 的 springboot-security Skill,正是为了解决“如何系统性地保障 Spring Boot 服务安全”这一核心痛点。相比传统手动查漏补缺、依赖人工经验的做法,这一 Skill 能自动识别安全薄弱点,并结合 AI Agent 给出具体修复建议,让安全成为开发流程的“默认配置”。

Skill 适用于 Claude Code 快速上手指南 所述的 AI 编程助手生态,能与 代码审查、依赖扫描、自动化 Hook 等体系协同,帮助开发者从初学到深度定制阶段,始终保持生产级安全标准。

1. Skill 解决了哪些实际问题?

传统痛点:

  • 认证/授权配置易出错,权限绕过风险高
  • 输入校验、CSRF、防爆破等常被忽视
  • 密钥、数据库密码等敏感信息误入源码
  • 依赖库 CVE 漏洞难以及时发现
  • 安全头、CORS、文件上传等细节配置繁琐

Skill 能力:

  • 统一审查认证(JWT、OAuth2、Session)、授权(@PreAuthorize 等)配置,建议最优实践
  • 自动检测输入校验、SQL 注入、CSRF、速率限制等高危点
  • 检查 secrets 管理,防止敏感信息泄漏
  • 集成依赖安全扫描(如 OWASP/Snyk),构建时阻断已知漏洞
  • 输出安全 checklist,辅助发布前自检

2. 何时会自动激活 springboot-security Skill?

Skill 会在以下场景被自动触发或建议使用:

  • 新增/修改认证(如 JWT、OAuth2、Session)相关代码
  • 控制器/服务层涉及授权、角色判断(如 @PreAuthorize、@Secured)
  • 新增 API 端点、表单、用户输入处理逻辑
  • 配置 CORS、CSRF、安全头、文件上传等功能
  • 代码中检测到 secrets、token、数据库密码等敏感信息
  • 依赖库变更、CI/CD 检查、发布前安全自检

Skill 也可通过 PreToolUse / PostToolUse Hook 配合,嵌入到自动化开发和交付流程中,实现“安全左移”。

3. 实战使用流程(Step by Step)

Step 1:在项目中启用 springboot-security Skill

在 Everything Claude Code 的配置界面或 .claude/skills.yaml 中,添加 springboot-security Skill。安装方法可参考 安装配置指南

yaml
skills:
  - name: springboot-security
    enabled: true

Skill 激活后,AI Agent 会在相关代码变更时自动审查安全风险。

Step 2:认证(Authentication)安全实践

  • 推荐使用无状态 JWT 或 opaque token,结合黑名单机制支持撤销
  • Session 模式下,强制 httpOnlySecureSameSite=Strict cookie
  • Token 校验建议用 OncePerRequestFilter 实现

示例:自定义 JWT 校验 Filter

java
@Component
public class JwtAuthFilter extends OncePerRequestFilter {
  private final JwtService jwtService;

  public JwtAuthFilter(JwtService jwtService) {
    this.jwtService = jwtService;
  }

  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
      FilterChain chain) throws ServletException, IOException {
    String header = request.getHeader(HttpHeaders.AUTHORIZATION);
    if (header != null && header.startsWith("Bearer ")) {
      String token = header.substring(7);
      Authentication auth = jwtService.authenticate(token);
      SecurityContextHolder.getContext().setAuthentication(auth);
    }
    chain.doFilter(request, response);
  }
}

Skill 检测到认证相关代码时,会自动检查 token 校验、cookie 配置等是否达标。

Step 3:授权(Authorization)与最小权限

  • 开启方法级安全(@EnableMethodSecurity
  • 推荐使用 @PreAuthorize("hasRole('ADMIN')") 或自定义权限表达式
  • 默认拒绝所有请求,仅暴露必要接口

示例:方法级权限控制

java
@RestController
@RequestMapping("/api/admin")
public class AdminController {

  @PreAuthorize("hasRole('ADMIN')")
  @GetMapping("/users")
  public List<UserDto> listUsers() {
    return userService.findAll();
  }

  @PreAuthorize("@authz.isOwner(#id, authentication)")
  @DeleteMapping("/users/{id}")
  public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    userService.delete(id);
    return ResponseEntity.noContent().build();
  }
}

Skill 会检查所有敏感路径是否加上了授权注解,并建议默认拒绝策略。

Step 4:输入校验与 SQL 注入防护

  • 控制器参数强制 @Valid,DTO 层加约束(如 @NotBlank, @Email
  • 所有 SQL 查询必须参数化,禁止字符串拼接

示例:安全的输入校验与查询

java
public record CreateUserDto(
    @NotBlank @Size(max = 100) String name,
    @NotBlank @Email String email,
    @NotNull @Min(0) @Max(150) Integer age
) {}

@PostMapping("/users")
public ResponseEntity<UserDto> createUser(@Valid @RequestBody CreateUserDto dto) {
  return ResponseEntity.status(HttpStatus.CREATED)
      .body(userService.create(dto));
}

// 安全的 native query
@Query(value = "SELECT * FROM users WHERE name = :name", nativeQuery = true)
List<User> findByName(@Param("name") String name);

Skill 会自动检测未加校验、拼接 SQL 等高危用法。

Step 5:CSRF、CORS 与安全头配置

  • 浏览器 Session 应用强制开启 CSRF,API 项目可关闭并用 token 保护
  • CORS 统一在 SecurityFilter 配置,生产环境严禁 *
  • 配置 Content-Security-Policy、XSS、Referrer-Policy 等安全头

示例:安全头与 CORS 配置

java
http
  .headers(headers -> headers
    .contentSecurityPolicy(csp -> csp.policyDirectives("default-src 'self'"))
    .frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)
    .xssProtection(Customizer.withDefaults())
    .referrerPolicy(rp -> rp.policy(ReferrerPolicyHeaderWriter.ReferrerPolicy.NO_REFERRER)));

@Bean
public CorsConfigurationSource corsConfigurationSource() {
  CorsConfiguration config = new CorsConfiguration();
  config.setAllowedOrigins(List.of("https://app.example.com"));
  config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));
  config.setAllowedHeaders(List.of("Authorization", "Content-Type"));
  config.setAllowCredentials(true);
  config.setMaxAge(3600L);

  UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  source.registerCorsConfiguration("/api/**", config);
  return source;
}

Skill 会自动检测安全头和 CORS 配置是否符合最佳实践。

Step 6:速率限制与爆破防护

  • 推荐用 Bucket4j 等库对敏感接口限流
  • 超限时返回 429,并记录日志便于监控

示例:基于 IP 的速率限制 Filter

java
@Component
public class RateLimitFilter extends OncePerRequestFilter {
  private final Map<String, Bucket> buckets = new ConcurrentHashMap<>();

  private Bucket createBucket() {
    return Bucket.builder()
        .addLimit(Bandwidth.classic(100, Refill.intervally(100, Duration.ofMinutes(1))))
        .build();
  }

  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
      FilterChain chain) throws ServletException, IOException {
    String clientIp = request.getRemoteAddr();
    Bucket bucket = buckets.computeIfAbsent(clientIp, k -> createBucket());

    if (bucket.tryConsume(1)) {
      chain.doFilter(request, response);
    } else {
      response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());
      response.getWriter().write("{\"error\": \"Rate limit exceeded\"}");
    }
  }
}

Skill 可自动识别高风险接口未限流的问题,并给出修复建议。

Step 7:依赖安全与敏感信息管理

  • 强制 secrets 用环境变量或 Vault 管理,application.yml 禁止明文密码
  • 引导集成 OWASP Dependency Check、Snyk 等工具,CI 阶段阻断含 CVE 的构建

示例:安全的 secrets 配置

yaml
spring:
  datasource:
    password: ${DB_PASSWORD}
  cloud:
    vault:
      uri: https://vault.example.com
      token: ${VAULT_TOKEN}

Skill 会扫描源码和配置,发现明文 secrets 或依赖漏洞时自动预警。

Step 8:发布前安全自检清单

Skill 输出一份 checklist,涵盖认证、授权、输入校验、CSRF、依赖、日志等所有关键点,供开发者或 Agent 审核发布门槛。

4. 输出示例

当你 push 代码或运行安全审查时,Skill 会输出如下结构化报告:

[Spring Boot Security Review]
- [PASS] 所有敏感 API 路径已加 @PreAuthorize
- [FAIL] /users POST 缺少 @Valid 输入校验
- [PASS] 所有 SQL 查询已参数化
- [WARN] application.yml 检测到明文密码,请改为环境变量
- [FAIL] 未配置速率限制,建议为 /login 接口加 Bucket4j
- [PASS] OWASP Dependency Check 无高危漏洞
...
建议:修复 FAIL/WARN 项后再发布,详细修复建议见 Skill 输出。

5. 常见协作 Agent/Skill 及最佳实践

FAQ

Q: springboot-security Skill 能自动修复安全问题吗?
A: Skill 主要负责自动检测与输出修复建议,配合代码修复 Agent 可实现一键修复部分安全问题。

Q: 速率限制和 CSRF 防护如何区分场景?
A: Skill 会根据接口类型(API vs 浏览器表单)自动建议开启/关闭 CSRF,并对高风险接口建议限流。

Q: 如何与依赖安全扫描工具集成?
A: Skill 支持检测 CI/CD 是否集成了如 OWASP Dependency Check、Snyk 等工具,并在未集成时给出配置指引。