Appearance
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: trueSkill 激活后,AI Agent 会在相关代码变更时自动审查安全风险。
Step 2:认证(Authentication)安全实践
- 推荐使用无状态 JWT 或 opaque token,结合黑名单机制支持撤销
- Session 模式下,强制
httpOnly、Secure、SameSite=Strictcookie - 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 及最佳实践
- 与 Java Reviewer Agent、Security Reviewer Agent 协作,自动识别和修复安全隐患
- 可与 springboot-verification Skill、security-scan Skill 组合,实现端到端安全验证与依赖扫描
- 通过 PreToolUse Hook 实现每次 push/PR 自动安全审查
FAQ
Q: springboot-security Skill 能自动修复安全问题吗?
A: Skill 主要负责自动检测与输出修复建议,配合代码修复 Agent 可实现一键修复部分安全问题。
Q: 速率限制和 CSRF 防护如何区分场景?
A: Skill 会根据接口类型(API vs 浏览器表单)自动建议开启/关闭 CSRF,并对高风险接口建议限流。
Q: 如何与依赖安全扫描工具集成?
A: Skill 支持检测 CI/CD 是否集成了如 OWASP Dependency Check、Snyk 等工具,并在未集成时给出配置指引。