springboot-security
Ajuda seu agente a garantir a segurança de aplicações Java Spring Boot. Ele verifica autenticação, autorização, validação, segredos e outras configurações importantes.
O que ela faz
Esta ferramenta ajuda a proteger seu aplicativo web Java (Spring Boot). Ela garante que apenas usuários autorizados acessem informações sensíveis e previne ataques comuns, como injeção de código e roubo de dados.
Quando usar
- ✓Ao adicionar login e senhas ao seu aplicativo.
- ✓Ao configurar quem pode ver ou fazer o quê no seu aplicativo.
- ✓Ao proteger seu aplicativo contra hackers e roubo de dados.
Exemplo do que pedir para a IA
“Como posso proteger meu aplicativo contra acesso não autorizado?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela configura regras de segurança, como quem pode acessar cada parte do seu aplicativo. Também valida as informações que os usuários enviam e protege contra códigos maliciosos.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill springboot-securityOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/springboot-security/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Revisão de Segurança do Spring Boot
Use ao adicionar autenticação, tratar entradas, criar endpoints ou lidar com segredos.
Quando Ativar
- Adicionando autenticação (JWT, OAuth2, baseada em sessão)
- Implementando autorização (@PreAuthorize, acesso baseado em roles)
- Validando entrada do usuário (Bean Validation, validadores customizados)
- Configurando CORS, CSRF ou cabeçalhos de segurança
- Gerenciando segredos (Vault, variáveis de ambiente)
- Adicionando limitação de taxa (rate limiting) ou proteção contra força bruta
- Escaneando dependências em busca de CVEs
Autenticação
- Prefira tokens JWT stateless ou tokens opacos com lista de revogação
- Use cookies
httpOnly,Secure,SameSite=Strictpara sessões - Valide tokens com
OncePerRequestFilterou resource server
@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);
}
}
Autorização
- Habilite segurança de métodos:
@EnableMethodSecurity - Use
@PreAuthorize("hasRole('ADMIN')")ou@PreAuthorize("@authz.canEdit(#id)") - Negue por padrão; exponha apenas os escopos necessários
@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();
}
}
Validação de Entrada
- Use Bean Validation com
@Validnos controllers - Aplique restrições em DTOs:
@NotBlank,@Email,@Size, validadores customizados - Limpe qualquer HTML com uma whitelist antes de renderizar
// BAD: No validation
@PostMapping("/users")
public User createUser(@RequestBody UserDto dto) {
return userService.create(dto);
}
// GOOD: Validated DTO
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));
}
Prevenção de Injeção de SQL
- Use repositórios Spring Data ou queries parametrizadas
- Para queries nativas, use bindings
:param; nunca concatene strings
// BAD: String concatenation in native query
@Query(value = "SELECT * FROM users WHERE name = '" + name + "'", nativeQuery = true)
// GOOD: Parameterized native query
@Query(value = "SELECT * FROM users WHERE name = :name", nativeQuery = true)
List<User> findByName(@Param("name") String name);
// GOOD: Spring Data derived query (auto-parameterized)
List<User> findByEmailAndActiveTrue(String email);
Codificação de Senhas
- Sempre hasheie senhas com BCrypt ou Argon2 — nunca armazene em texto plano
- Use o bean
PasswordEncoder, não hashing manual
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12); // cost factor 12
}
// In service
public User register(CreateUserDto dto) {
String hashedPassword = passwordEncoder.encode(dto.password());
return userRepository.save(new User(dto.email(), hashedPassword));
}
Proteção CSRF
- Para apps com sessões de navegador, mantenha o CSRF habilitado; inclua o token em formulários/cabeçalhos
- Para APIs puras com tokens Bearer, desabilite o CSRF e confie na autenticação stateless
http
.csrf(csrf -> csrf.disable())
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
Gerenciamento de Segredos
- Sem segredos no código; carregue de variáveis de ambiente ou vault
- Mantenha
application.ymllivre de credenciais; use placeholders - Rotacione tokens e credenciais de banco de dados regularmente
# RUIM: Hardcoded em application.yml
spring:
datasource:
password: mySecretPassword123
# BOM: Placeholder de variável de ambiente
spring:
…
Perguntas frequentes
O que é autenticação?
É o processo de verificar quem você é, geralmente com um nome de usuário e senha.
O que é autorização?
É o processo de decidir o que um usuário autenticado pode fazer ou ver.
Por que não devo colocar senhas diretamente no código?
Colocar senhas no código é perigoso porque qualquer pessoa que veja o código pode descobrir a senha. É melhor usar métodos mais seguros para armazenar segredos.
Detalhes
Descrição original do autor
Spring Security best practices for authn/authz, validation, CSRF, secrets, headers, rate limiting, and dependency security in Java Spring Boot services. Use when reviewing Spring Security authn/authz, validation, CSRF, secrets, headers, or rate limiting.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #121
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
api-and-interface-design
Ajuda a criar APIs e interfaces bem definidas. É útil ao projetar como diferentes partes de um software vão se comunicar.
addyosmani/agent-skills
mason
Ajuda seu agente a escrever código limpo e funcional. Ele segue as regras definidas para garantir que tudo funcione como esperado.
sickn33/agentic-awesome-skills
max
Faz seu agente melhorar o código existente sem mudar o que ele faz. Ele deixa o código mais fácil de ler e manter.
sickn33/agentic-awesome-skills