乔人尹 - 安全框架
type: channel
link: https://underestimated.cn/tag/%E5%AE%89%E5%85%A8%E6%A1%86%E6%9E%B6/
items: java系统安全框架

java系统安全框架
type: item
date: 2023-01-01T08:27:00+00:00
description: 前言：为什么你需要读这篇文章还记得那个深夜吗？你的系统被人用 admin/123456 登录了，然后删库跑路。老板问你："我们的安全措施呢？"你支支吾吾地说："我以为用户会自觉的..."朋友，醒醒吧。本文将带你深入了解Java世界的三大安全框架：Spring Security（官方嫡长子）、Apache Shiro（轻量级老将）、Sa-Token（国产新秀）。看完之后，你至少能在老板面前假装很懂安全。一、安全框架核心概念在开始之前，先搞清楚几个灵魂拷问：1.1 认证 vs 授权认证（Authentication）：你是谁？—— 验明正身 授权（Authorization）：你能干啥？—— 权限控制打个比方：认证：门卫检查你的工牌，确认你是公司员工授权：你虽然是员工，但你不能进财务室拿钱1.2 安全框架核心架构flowchart TB subgraph 客户端 A[用户请求] end subgraph 安全框架 B[认证过滤器链] C[身份认证模块] D[授权决策模块] E[会话管理] F[密码加密] end subgraph 业务系统 G[Controller] H[Service] I[数据库] end A --> B B --> C C -->|认证成功| D C -->|认证失败| J[返回401] D -->|授权通过| G D -->|授权失败| K[返回403] G --> H --> I C E C F1.3 主流安全框架对比特性Spring SecurityApache ShiroSa-Token学习曲线🔥🔥🔥🔥🔥 陡峭如珠峰🔥🔥🔥 相对平缓🔥🔥 新手友好功能完整度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐Spring集成原生支持需要适配良好支持社区活跃度非常活跃一般国内活跃OAuth2支持原生支持需要扩展内置支持文档质量英文为主,较全一般中文友好适用场景企业级复杂系统中小型项目快速开发二、Spring Security：官方嫡长子2.1 简介Spring Security 是 Spring 家族的亲儿子，功能强大到令人发指，配置复杂到令人放弃。但没办法，谁让人家是正统呢？"Spring Security 的学习曲线不是曲线，是悬崖。" —— 某不愿透露姓名的秃头程序员2.2 核心架构flowchart TB subgraph FilterChain[安全过滤器链] F1[SecurityContextPersistenceFilter安全上下文持久化] F2[UsernamePasswordAuthenticationFilter用户名密码认证] F3[BasicAuthenticationFilterBasic认证] F4[ExceptionTranslationFilter异常转换] F5[FilterSecurityInterceptor授权拦截器] end subgraph Core[核心组件] A[AuthenticationManager认证管理器] P[AuthenticationProvider认证提供者] U[UserDetailsService用户详情服务] E[PasswordEncoder密码编码器] end subgraph Authorization[授权组件] AD[AccessDecisionManager访问决策管理器] V1[AffirmativeBased一票通过] V2[ConsensusBased少数服从多数] V3[UnanimousBased一票否决] end F1 --> F2 --> F3 --> F4 --> F5 F2 --> A A --> P P --> U P --> E F5 --> AD AD --> V1 AD --> V2 AD --> V32.3 快速入门2.3.1 添加依赖 org.springframework.boot spring-boot-starter-security 恭喜你！加完这一行，你的所有接口都需要登录了。是不是很惊喜？😏2.3.2 基础配置（Spring Boot 3.x 风格）@Configuration @EnableWebSecurity @EnableMethodSecurity // 开启方法级别安全 public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 关闭CSRF（前后端分离项目通常关闭） .csrf(csrf -> csrf.disable()) // 配置请求授权规则 .authorizeHttpRequests(auth -> …