当前位置: 首页 > news >正文

Spring Security掌握内容速忆(适用于初学者)

目录

一、需要掌握的

二、详细指引

1. 配置文件

2. 查用户

3. 在 Controller 里获取当前用户

四、容易搞混的问题

五、Security 报错解决方案


Spring Security 是公司里“骨架化”程度最高的组件之一,架构组会提供一个“认证授权中心”的 Maven 骨架(archetype),我们只需要:

  1. 改数据库表名(如果要加字段)
  2. 配白名单路径(哪些接口不需要登录)
  3. 写一个实现类(告诉框架怎么从数据库查用户)

其他的,比如 JWT 生成/校验、密码加密、Session 管理、过滤器链……统统不用你管,全是现成的。


一、需要掌握的

层级

需要掌握的内容

开发必知

1. 怎么配白名单(/login/register放行)
2. 怎么实现UserDetailsService(查数据库)
3. 怎么获取当前登录用户信息

面试必问

认证流程(用户→UsernamePasswordAuthenticationToken→AuthenticationManager→UserDetailsService)

排错必看

401/403 的区别;怎么从 SecurityContext 里取用户


二、详细指引

1. 配置文件(只需要改这三行)
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth -> auth // 我们只需要在这里加白名单 .requestMatchers("/api/login", "/api/register", "/swagger-ui/**").permitAll() .anyRequest().authenticated() ); return http.build(); } }
2. 查用户(唯一要写的核心逻辑)
@Service public class MyUserDetailsService implements UserDetailsService { @Autowired private UserMapper userMapper; @Override public UserDetails loadUserByUsername(String username) { // 就写这一句:从数据库查用户 User user = userMapper.selectByUsername(username); if (user == null) { throw new UsernameNotFoundException("用户不存在"); } // 然后返回给框架,框架会自动校验密码 return new org.springframework.security.core.userdetails.User( user.getUsername(), user.getPassword(), new ArrayList<>() // 权限列表 ); } }
3. 在 Controller 里获取当前用户(直接拿)
@GetMapping("/me") public UserInfo getCurrentUser() { // 就这么拿当前登录用户,不用自己解析Token Authentication auth = SecurityContextHolder.getContext().getAuthentication(); String username = auth.getName(); return userService.findByUsername(username); }

四、容易搞混的问题

问题

答案

401 和 403 什么区别?

401 = 没登录(未认证);403 = 登录了但权限不够(已认证但无权限)

SecurityContext 里拿不到用户?

检查过滤器链是否执行了,或者是不是在/permitAll()的路径里

我怎么区分普通用户和管理员?

在 User 表里加一个role字段,然后在loadUserByUsername里把角色塞进权限列表,框架会自动拦截


五、Security 报错解决方案

先检查:

  1. /login放行了没有?(没放行就一直在登录页循环)
  2. UserDetailsService里查到的用户密码对不对?(错一个就 401)
  3. 密码加密方式一致吗?(明文和 BCrypt 别混用)

只要把这三条记牢,Spring Security 这块就算过关了

http://www.cnnetsun.cn/news/3609613.html

相关文章:

  • 华为鸿蒙免费铃声软件—小羊免费铃声
  • 基于人脸识别的无人值守自习室预约系统设计与实现
  • 高斯泼溅技术-从入门到精通
  • DeepSeek专家模式突破对话上限技巧,无缝衔接新对话!
  • 非结构化数据满天飞,90%的敏感数据藏在文档堆里,怎么让AI真正分得清?
  • 大模型分布式训练与显存优化核心技术解析
  • 因算力紧缺,月之暗面Kimi宣布暂停C端新用户订阅;ASML回应向全球员工发2万欧元股权激励;Qwen3.8-Max预览版上线 | 极客头条
  • 2026年英文论文翻译工具横评:5款主流方案实测对比与效率选型指南
  • UVM验证平台的死亡陷阱:从入门到放弃的那些坑
  • FreeRDP曝高危堆缓冲区溢出漏洞:wfreerdp客户端遭弃用,远程代码执行风险急剧上升
  • 【Springboot毕设全套源码+文档】基于JavaWeb的图书馆管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 下拉刷新库:通用下拉刷新与上拉加载组件(243)
  • 弹窗库:Toast、Loading、ActionSheet的统一封装(244)
  • C 语言 struct 内存对齐与面向对象:从 padding 到函数指针接口
  • 从“刷卡拥堵”到“秒级通行”:一张RFID电子校徽如何让校园管理有迹可循?
  • 2023三大开源AI工具实战:Dify、n8n与OpenClaw
  • 东莞商旅服务平台头部机构多维度能力梳理及选型参考
  • LLM Agent技术演进:从定制化到通用化
  • 解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
  • LLM到Agent的技术演进与核心组件解析
  • Windows11的SMB共享文件夹
  • 英文降AI率实战:Turnitin更新后,文本AI率优化策略(附3款工具测评)
  • 上海宝山高境开公司的老板注意!低价代账正在拖垮你的企业
  • 从 50 字段订单表到可演进订单领域:一次基于真实代码的 DDD 重构分析
  • VS Code远程开发——现代机器人开发的主流IDE方案
  • Python agate-stats 包详解:功能、安装、语法与实战案例
  • Python agate-lookup 包详解:功能、安装、语法与实战案例
  • 2026 主流热门 AI 配音软件合集深度实测测评报告
  • 全球80000余座大型国际机场、地区性通航机场、水上飞机起降点分布矢量数据
  • 深入解析TMS320C5x DSP架构:哈佛结构、外设协同与低功耗设计实战