SpringSecurity是什么
Spring Security 是 Spring 生态体系中用于处理应用程序安全问题的核心框架,专注于解决 Java 应用(尤其是 Spring Boot/Spring MVC 应用)的 认证(Authentication) 和 授权(Authorization) 两大核心需求,同时提供了丰富的安全防护能力。它并非独立框架,而是与 Spring 无缝集成(自动适配 Spring 的 IoC/DI 机制),支持从简单的用户名密码登录,到复杂的 OAuth2.0、JWT、第三方登录(如微信、GitHub)等场景,且具备极强的可扩展性(允许自定义认证逻辑、授权规则等)。
有什么用
认证(Authentication):验证 “你是谁”
支持多种认证方式:用户名密码登录、短信验证码、OAuth2.0(微信 / QQ/ GitHub 第三方登录)、JWT(无状态认证)、LDAP(企业内部认证)等;处理认证流程:自动拦截未认证请求、跳转登录页(或返回 401)、认证成功 / 失败的回调处理;用户信息管理:集成 UserDetailsService 接口,支持从数据库、缓存、配置文件等任意来源加载用户信息(用户名、密码、角色 / 权限)。默认情况下,Spring Security 是「基于 Session 的登录认证」,完全复用我们之前讲的「Cookie + Session」状态保持逻辑,流程如下(结合用户操作和底层原理):

UsernamePasswordAuthenticationFilter、AuthenticationManager、AuthenticationProvider、UserDetailsService、UserDetails、PasswordEncoder、SecurityContextHolder、SessionRepository使用场景:基于 JWT 的无状态登录(替代 Session),在分布式系统中,基于 Session 的登录需要共享 Session(比如用 Redis),而 JWT(JSON Web Token)是「无状态」的,不需要存储 Session,更适合分布式场景。核心逻辑:
(1)登录成功后,服务器生成 JWT 令牌(包含用户名、权限、过期时间),返回给客户端;
(2)客户端后续请求时,在请求头 Authorization: Bearer 中携带令牌;
(3)服务器通过过滤器拦截请求,验证 JWT 合法性(是否过期、签名是否正确),合法则允许访问。
授权(Authorization):控制 “你能做什么”
细粒度权限控制:
(1)URL 级:限制某类用户(如 ADMIN)才能访问 /admin/** 接口;
(2)方法级:通过注解(如 @PreAuthorize(“hasRole(‘ADMIN’)”))限制方法只能被特定角色调用;
(3)资源级:控制用户只能操作自己的资源(如只能查看自己的订单);支持多种授权模型:基于角色(RBAC)、基于权限、基于表达式(SpEL)等。
什么是 JWT
JWT 是 JSON Web Token 的缩写,直译 “JSON 网络令牌”,是一种 轻量级、自包含的身份认证令牌格式。可以通俗理解为:一串经过加密签名的 JSON 数据 “电子通行证”,令牌本身包含了用户身份、权限等核心信息(无需依赖服务器存储会话),服务端通过验证令牌的签名和有效性,就能确认用户身份,无需查询数据库或缓存。JWT 由 3 段 Base64 编码(非加密,仅编码)的字符串组成,格式为 Header.Payload.Signature:

实际开发中,到底是将JWT放到Authorization还是cookie中
JWT 放在 Authorization 请求头用于一下场景
前后端分离项目(Vue/React/Angular + Spring Boot/Node.js);
跨域场景(如前端 http://web.example.com 调用后端 http://api.example.com);
微服务架构(跨服务认证,无需共享 Cookie);
移动端(iOS/Android/ 小程序):移动端无 Cookie 概念,Header 是天然载体。优缺点
优点:不受 Cookie「同源策略」限制(跨域请求时,浏览器默认不会携带其他域名的 Cookie,但会允许自定义 Header),完美适配前后端分离和微服务;契合 JWT「无状态认证」的核心设计,服务端无需处理 Cookie 会话,仅验证令牌即可;
缺点:XSS 攻击(跨站脚本攻击)—— 若前端将 JWT 存在 localStorage/sessionStorage,恶意脚本可通过 document.cookie 或 localStorage.getItem 窃取令牌,进而冒充用户访问。所以前端防 XSS必做:输入内容过滤(过滤
OAuth 是什么?
OAuth 全称「Open Authorization」(开放授权),是一套国际标准的授权协议,核心目标是「让第三方应用在不获取用户账号密码的情况下,获得用户的部分资源访问权限」。


springsecurity+jwt+oauth怎么实现单点登录
搭建一个统一的「OAuth 2.0 授权服务器」(发放 JWT 令牌),让多个「资源服务器」(业务应用)信任该授权服务器,用户只需在授权服务器登录一次,即可用 JWT 令牌访问所有信任的资源服务器。比如:创建一个springsecurity,弹出一个微信登录页面,用于扫码确认获取昵称和头像,服务器会记住微信用户的appID之类的唯一字符串,我们在对字符串做JWT处理和持久化处理。