Pular para o conteúdo
Skillpedia
APIs e servidores (backend)280 mil · #121

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

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/springboot-security/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/springboot-security/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-security

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/springboot-security/SKILL.md -o SKILL.md
Conteú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=Strict para sessões
  • Valide tokens com OncePerRequestFilter ou 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 @Valid nos 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.yml livre 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas