Spring Security 教程(03)、简介

认证:证明你是你是谁

tutorial-overview 配图
tutorial-overview 配图
tutorial-overview 配图

认证(Authentication)是安全系统的第一步。用户需要提供身份证明,系统验证这个身份是否合法。

Spring Security 支持的认证方式包括:

  • HTTP Basic 认证:浏览器弹出登录框,适合 API 调用
  • 表单登录:自定义登录页面,适合 Web 应用
  • HTTP Digest 认证:基于哈希的认证方式,比 Basic 更安全
  • X.509 客户端证书:基于 SSL 证书的身份验证
  • LDAP 认证:连接企业 LDAP 目录服务
  • OpenID 认证:基于 OAuth 的第三方登录
  • CAS 认证:企业级单点登录方案
  • Remember-Me:自动登录,基于 Cookie
  • JAAS 认证:Java 认证和授权服务

授权:证明你有权限做这件事

认证通过后,系统需要判断这个用户能做什么。授权(Authorization)就是做这个判断的。

Spring Security 的授权分为三个层次:

1. URL 级别授权:控制哪些 URL 需要认证、哪些可以公开访问。

1
2
3
4
http.authorizeRequests()
.requestMatchers("/api/public/**").permitAll()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated();

2. 方法级别授权:控制哪些方法可以被哪些角色调用。

1
2
@PreAuthorize("hasRole('ADMIN') and #userId == authentication.principal.id")
public void deleteUser(Long userId) { ... }

3. 域对象级别授权:控制用户对具体数据对象的访问权限,通常结合 ACL(访问控制列表)实现。

安全过滤器链:请求经过的每一道关卡

Spring Security 的核心是一个 Servlet Filter 链。每个 HTTP 请求都会经过这个链上的每个 Filter,每个 Filter 负责一个安全职责。

关键 Filter 包括:

  • SecurityContextPersistenceFilter:在请求开始前加载 SecurityContext,请求结束后保存
  • UsernamePasswordAuthenticationFilter:处理表单登录请求
  • BasicAuthenticationFilter:处理 HTTP Basic 认证
  • ExceptionTranslationFilter:处理认证和授权异常
  • FilterSecurityInterceptor:最终的授权决策点

架构设计:分层清晰,职责分离

Spring Security 的架构设计遵循单一职责原则。认证由 AuthenticationManager 负责,授权由 AccessDecisionManager 负责,安全上下文由 SecurityContextHolder 管理。这种设计让你可以灵活替换某个组件,而不影响其他部分。

本文档的结构

本指南分为三个部分:

  • 第二部分”入门”:快速了解框架,配置好一个基本应用
  • 第三部分”架构和实现”:深入了解框架内部的工作原理
  • 后续章节:按功能模块组织的引用式文档,按需查阅

安全提醒:Spring Security 不是万能的。它解决的是应用层的认证授权问题,但传输层安全(HTTPS)、基础设施安全(防火墙、WAF)、应用层漏洞(XSS、SQL注入)需要其他措施来防护。