Spring Boot 安全审查
在添加身份验证、处理输入、创建端点或处理密钥时使用。
何时激活
- 添加身份验证(JWT、OAuth2、基于会话)
- 实现授权(@PreAuthorize、基于角色的访问控制)
- 验证用户输入(Bean Validation、自定义验证器)
- 配置 CORS、CSRF 或安全标头
- 管理密钥(Vault、环境变量)
- 添加速率限制或暴力破解防护
- 扫描依赖项以查找 CVE
身份验证
- 优先使用无状态 JWT 或带有撤销列表的不透明令牌
- 对于会话,使用
httpOnly、Secure、SameSite=Strictcookie - 使用
OncePerRequestFilter或资源服务器验证令牌
@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);
}
}
授权
- 启用方法安全:
@EnableMethodSecurity - 使用
@PreAuthorize("hasRole('ADMIN')")或@PreAuthorize("@authz.canEdit(#id)") - 默认拒绝…