Spring Security 安全框架:从入门到实战
1. Spring Security 简介Spring Security 是 Spring 生态中功能强大且应用广泛的安全框架它为基于 Spring 的应用程序提供了全面的身份认证Authentication和授权Authorization解决方案。无论是单体应用还是微服务架构Spring Security 都能帮助开发者轻松应对 Web 安全、方法级安全、领域对象安全等复杂挑战。2. 核心功能与特性身份认证支持多种认证方式如表单登录、HTTP Basic、OAuth 2.0、JWT 等。授权管理提供基于角色Role、权限Authority、表达式SpEL的细粒度访问控制。防护攻击内置 CSRF、CORS、会话固定、点击劫持等常见 Web 攻击防护。易于集成与 Spring Boot、Spring MVC、Spring Data 等 Spring 项目无缝集成。高度可扩展允许开发者自定义认证逻辑、用户详情服务、密码加密器等组件。3. 快速开始一个简单的安全配置以下是一个基于 Spring Boot 的最小化 Spring Security 配置示例它会为所有请求启用 HTTP Basic 认证。import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; Configuration EnableWebSecurity public class BasicSecurityConfig { Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth - auth .anyRequest().authenticated() // 所有请求都需要认证 ) .httpBasic(); // 启用 HTTP Basic 认证 return http.build(); } Bean public UserDetailsService userDetailsService() { // 在内存中创建一个测试用户 UserDetails user User.withDefaultPasswordEncoder() .username(user) .password(password) .roles(USER) .build(); return new InMemoryUserDetailsManager(user); } }启动应用后访问任何端点都需要输入用户名user和密码password。4. 核心概念详解4.1 SecurityContext 与 AuthenticationSecurityContext持有当前线程的Authentication对象它代表了当前用户的认证信息包括主体Principal、凭证Credentials和权限Authorities。4.2 UserDetails 与 UserDetailsServiceUserDetails接口封装了用户的核心信息UserDetailsService则负责根据用户名加载用户数据是连接自定义用户存储如数据库的桥梁。4.3 过滤器链Filter ChainSpring Security 的本质是一个过滤器链请求会依次经过多个安全过滤器如UsernamePasswordAuthenticationFilter、BasicAuthenticationFilter每个过滤器负责处理特定的安全任务。5. 实战基于数据库的认证与角色授权实际项目中用户信息通常存储在数据库中。以下示例展示了如何集成 Spring Data JPA 实现自定义的UserDetailsService。import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; Service public class CustomUserDetailsService implements UserDetailsService { private final UserRepository userRepository; public CustomUserDetailsService(UserRepository userRepository) { this.userRepository userRepository; } Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 从数据库查询用户 UserEntity user userRepository.findByUsername(username) .orElseThrow(() - new UsernameNotFoundException(用户不存在: username)); // 将数据库实体转换为 Spring Security 所需的 UserDetails return org.springframework.security.core.userdetails.User.builder() .username(user.getUsername()) .password(user.getEncryptedPassword()) // 假设密码已加密 .roles(user.getRoles().toArray(new String[0])) // 设置角色 .build(); } }配置 HTTP 安全规则实现基于角色的访问控制Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth - auth .requestMatchers(/admin/**).hasRole(ADMIN) // /admin 路径需要 ADMIN 角色 .requestMatchers(/user/**).hasAnyRole(USER, ADMIN) // /user 路径需要 USER 或 ADMIN 角色 .requestMatchers(/public/**).permitAll() // /public 路径允许所有人访问 .anyRequest().authenticated() // 其他所有请求需要登录 ) .formLogin(); // 启用表单登录 return http.build(); }6. 进阶主题与最佳实践密码加密务必使用PasswordEncoder如 BCryptPasswordEncoder对密码进行哈希存储切勿明文保存。JWT 与无状态认证在微服务或前后端分离架构中可使用 JWTJSON Web Token实现无状态、可扩展的认证方案。方法级安全使用PreAuthorize、PostAuthorize等注解在服务层进行更细粒度的权限控制。CSRF 防护在渲染表单时务必包含 CSRF Token对于纯 API 服务可考虑禁用 CSRF。会话管理合理配置会话超时、并发控制以及安全的会话固定保护策略。

相关新闻

PHP应用打包与分发实战:深入PHAR文件格式与构建实践

PHP应用打包与分发实战:深入PHAR文件格式与构建实践

1. 项目概述:从“压缩包”到“自包含应用”的PHAR革命 如果你用PHP做过项目部署,肯定对那一大堆零散的 .php 文件、配置文件、静态资源感到头疼。传统的部署方式要么是直接上传整个目录,要么是用ZIP打包再解压,不仅繁琐&#xf…

2026/8/1 8:06:48阅读更多 →
PingPong发起国内首个Maker Tool行业联盟,助力中国品牌拓展海外创客工具市场

PingPong发起国内首个Maker Tool行业联盟,助力中国品牌拓展海外创客工具市场

随着3D打印等数字化制造工具走向消费市场,PingPong联合产业链企业发起国内首个Maker Tool行业联盟,发布白皮书,推动中国创客工具品牌出海。行业加速成长3D打印、激光雕刻等数字化制造工具从专业领域走向消费市场,让过去小众的硬件…

2026/8/1 8:06:48阅读更多 →
AI大模型应用开发实战:从LangChain、RAG到Agent的完整指南

AI大模型应用开发实战:从LangChain、RAG到Agent的完整指南

最近在AI大模型应用开发中,很多开发者反馈面对LangChain、RAG、Agent等新技术概念时感到无从下手,网上资料零散且缺乏系统性实战指导。本文基于实际项目经验,整理一套完整的AI大模型应用开发教程,涵盖从基础概念到项目落地的全流程…

2026/8/1 8:06:48阅读更多 →
C语言printf中%g格式符的深度解析与实战应用

C语言printf中%g格式符的深度解析与实战应用

1. 项目概述:从一次调试说起那天下午,我正盯着调试器里一串奇怪的浮点数输出发呆。代码里明明计算的是3.1415926535,printf出来的却是3.14159。我第一反应是哪里算错了,或者内存被污染了。排查了半天,从算法到内存分配…

2026/8/1 9:21:10阅读更多 →
Django迁移机制深度解析:从makemigrations到migrate的完整指南

Django迁移机制深度解析:从makemigrations到migrate的完整指南

1. 从“数据库设计图”到“施工队”:理解Django迁移的本质如果你刚开始接触Django,或者已经用它写过几个小项目,那么python manage.py makemigrations和python manage.py migrate这两个命令,绝对是你每天都会打上无数遍的“咒语”…

2026/8/1 9:21:10阅读更多 →
2026年同价位中,Dalerda工具包较XX品牌优势几何?是否明显揭晓!

2026年同价位中,Dalerda工具包较XX品牌优势几何?是否明显揭晓!

在当今的工具包市场,随着工业、户外等领域的不断发展,工具包的需求日益增长。消费者对于工具包的要求也越来越高,不仅需要其具备良好的收纳功能,还希望在耐用性、工艺品质和价格等方面达到平衡。在宁波地区,众多工厂都…

2026/8/1 9:21:10阅读更多 →
Sobel与Canny边缘检测:原理、调优与工程实践全解析

Sobel与Canny边缘检测:原理、调优与工程实践全解析

1. 从“找边”到“识界”:边缘检测的工程价值与核心挑战在图像处理的世界里,边缘检测是那个最基础、也最迷人的“基本功”。它不像目标识别那样能直接告诉你“这是猫还是狗”,也不像图像生成那样能创造出绚丽的画面。它的任务更纯粹&#xff…

2026/8/1 9:21:10阅读更多 →
NS-USBLoader终极指南:一站式解决Switch文件传输、RCM注入和文件管理难题

NS-USBLoader终极指南:一站式解决Switch文件传输、RCM注入和文件管理难题

NS-USBLoader终极指南:一站式解决Switch文件传输、RCM注入和文件管理难题 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gi…

2026/8/1 9:21:10阅读更多 →
程序员兼职平台全解析:从新手到数字游民的实战指南

程序员兼职平台全解析:从新手到数字游民的实战指南

1. 从“打工人”到“数字游民”:程序员兼职平台的真实价值最近和几个老同事聊天,发现一个挺有意思的现象:大家嘴上说着“躺平”,但私下里都在琢磨怎么搞点副业。尤其是我们做技术的,总感觉手头的技能除了给公司打工&am…

2026/8/1 9:19:09阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/31 20:44:05阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/31 17:41:43阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/31 20:44:05阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →