深入解析 Spring Security:构建安全的 Spring Boot 应用

Spring Boot整合Spring Security:构建高安全的分布式系统 在微服务架构中,系统安全面临两大核心挑战:‌认证分散化‌(多服务统一登录)和‌授权动态化‌(实时权限控制)。Spring Security作为Spring生态的官方安全框架,凭借其‌模块化设计‌、‌深度整合能力‌以及‌对OAuth2的天然支持‌,成为企业级安全方案的首选。本文基于‌与‌,深度解析其核心原理,并通过代码演示如何实现‌分布式认证‌、‌动态权限管理‌和‌无状态API保护‌。实现@Service@Autowired@Override。 阅读详情

深入解析 Spring Security:构建安全的 Spring Boot 应用

在当今的软件开发中,安全性是至关重要的。Spring Security 是一个功能强大且高度可定制的 Java 安全框架,用于保护基于 Spring 的应用程序。它提供了身份验证、授权、防止常见的安全攻击等功能。本文将详细介绍如何在 Spring Boot 项目中集成 Spring Security,实现用户认证、授权以及一些高级安全特性。


一、Spring Security 简介

Spring Security 是一个专注于安全性的框架,提供了全面的安全功能,包括但不限于:

  1. 身份验证(Authentication):验证用户的身份,确保用户是他们声称的那个人。
  2. 授权(Authorization):控制用户对资源的访问权限。
  3. 防止常见攻击:如 CSRF(跨站请求伪造)、XSS(跨站脚本攻击)等。
  4. 会话管理:管理用户的会话,包括登录、登出和会话超时。
  5. OAuth2 支持:支持基于 OAuth2 的认证和授权。

Spring Security 的设计目标是提供灵活且可扩展的安全解决方案,同时与 Spring 生态系统无缝集成。


二、Spring Boot 集成 Spring Security

1. 创建 Spring Boot 项目

使用 Spring Initializr 创建一个基础的 Spring Boot 项目,添加以下依赖:

  • Spring Web:用于构建 Web 应用。
  • Spring Security:用于安全保护。
  • Thymeleaf(可选):用于构建动态 HTML 页面。

2. 添加依赖

在 pom.xml 文件中,确保添加了 Spring Security 的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
    </dependency>
</dependencies>

三、配置 Spring Security

1. 配置安全策略

创建一个配置类 SecurityConfig,继承自 WebSecurityConfigurerAdapter,并重写相关方法以定义安全策略:

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.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable() // 禁用 CSRF 保护(仅用于演示)
            .authorizeRequests()
                .antMatchers("/login", "/register", "/home").permitAll() // 允许访问登录、注册和主页
                .antMatchers("/admin/**").hasRole("ADMIN") // 仅允许管理员访问 /admin 路径
                .antMatchers("/user/**").hasRole("USER") // 仅允许普通用户访问 /user 路径
                .anyRequest().authenticated() // 其他请求需要认证
            .and()
            .formLogin()
                .loginPage("/login").permitAll() // 自定义登录页面
                .defaultSuccessUrl("/home", true) // 登录成功后跳转到主页
            .and()
            .logout().permitAll(); // 允许访问登出页面
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(); // 使用 BCrypt 加密密码
    }
}

2. 配置用户信息

Spring Security 提供了多种方式来配置用户信息,包括内存用户、数据库用户等。以下是一个简单的内存用户配置示例:

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password(passwordEncoder().encode("123456")).roles("USER")
            .and()
            .withUser("admin").password(passwordEncoder().encode("admin123")).roles("ADMIN");
    }
}

四、创建登录页面

使用 Thymeleaf 创建一个简单的登录页面 login.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h1>登录</h1>
    <form th:action="@{/login}" method="post">
        <div><label>用户名: <input type="text" name="username"></label></div>
        <div><label>密码: <input type="password" name="password"></label></div>
        <div><button type="submit">登录</button></div>
    </form>
</body>
</html>

五、创建控制器

创建一个简单的控制器来处理请求:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/home")
    public String home() {
        return "home";
    }

    @GetMapping("/admin/dashboard")
    public String adminDashboard() {
        return "admin/dashboard";
    }

    @GetMapping("/user/profile")
    public String userProfile() {
        return "user/profile";
    }
}

六、高级特性

1. 自定义用户详情服务

在实际项目中,用户信息通常存储在数据库中。可以通过实现 UserDetailsService 来加载用户信息:

import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Optional;

@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Optional<User> user = userRepository.findByUsername(username);
        if (user.isEmpty()) {
            throw new UsernameNotFoundException("用户不存在");
        }
        return new org.springframework.security.core.userdetails.User(user.get().getUsername(), user.get().getPassword(), new ArrayList<>());
    }
}

2. JWT 支持

Spring Security 支持 JWT(JSON Web Token)用于无状态认证。通过 JWT,可以在不依赖会话的情况下实现用户认证:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtUtil {
    private String secretKey = "yourSecretKey";

    public String generateToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 10小时有效期
                .signWith(SignatureAlgorithm.HS256, secretKey)
                .compact();
    }

    public String extractUsername(String token) {
        return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject();
    }
}

七、总结

Spring Security 是一个功能强大且灵活的安全框架,能够为 Spring Boot 应用提供全面的安全保护。通过简单的配置,我们可以实现用户认证、授权、会话管理和防止常见攻击等功能。同时,Spring Security 也支持高级特性,如自定义用户详情服务、JWT 支持等,以满足复杂的安全需求。

希望本文能帮助你更好地理解和使用 Spring Security。如果你对 Spring Security 还有其他问题,或者有更多有趣的实践案例,欢迎在评论区留言交流!

spring security详解 1.概要 Spring是非常流行和成功的Java应用开发框架,SpringSecurity正是Spring家族中的成员。SpringSecurity基于Spring框架,提供了一套Web应用安全性的完整解决方案。正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控制),一般来说,Web应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分,这两点也是SpringSecurity重要核心功能。 (1)用户认证指的是:验证某个用户是否为系统 阅读详情

相关推荐

SpringSecurity详解

本文详解介绍了security原理、多种方式配置登录、角色和权限访问控制、常用注解、用户注销。

m0_71012114的博客 5528

SpringBoot+Security+Vue前后端分离开发权限管理系统

适用人群所有的IT从业者,尤其适合快速掌握新技术,快速增长工作经验人群,对教育公平,教育公益,教育爱心公益人士课程概述该互联网实战项目是基于 Spring Boot 2+ SpringSecurity5+Element UI+Vue Admin Template+蚂蚁可视化AntV 等技术栈开发的项目,采用分布式,多模块,前后端分离开发。包括图形展示、权限管理、用户管理等功能。【后端技术】技术说明Spring Boot2MVC框架 开发的一站式解决方案Spring Security5 认证和授权框架MyBatisPlus3.3.1 基于 MyBatis 框架的快速研发框架MyBatisCode工具生成 MyBatis 相关代码Jackson提供了处理 JSON 数据的工具Lombok简化对象封装工具 Druid   数据库连接池 【前端技术】Vue       互联网最火的前端框架Vue Router路由框架Vuex全局状态管理框架Axios前端 HTTP 框架Element UI前端 UI 框架Vue Element Admin前端模板Antv  蚂蚁金服可视化技术,阿里巴巴可视化技术,天猫,淘宝,支付宝,花呗均使用AntV【开发工具】IntelliJ IDEA开发 IDESQLyog数据库连接客户端PostmanHTTP 请求工具【开发环境】工具版本JDK1.8MySQL5.7

SpringBoot整合Spring Security【超详细教程】

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。它的核心是一组过滤器链,不同的功能经由不同的过滤器。这篇文章就是想通过一个小案例将Spring Security整合到SpringBoot中去。要实现的功能就是在认证服务器上登录,然后获取Token,再访问资源服务器中的资源。什么叫做单点登录呢。就是在一个多应用系统中,只要在其中一个系统上登录之后,不需要在其它系统上登录也可以访问其内容。举个例子,京东那么复

m0_52789121的博客 8884

SpringBoot之SpringSecurity(安全)

SpringSecurity(安全) Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理! 记住几个类: WebSecurityConfigurerAdapter:自定义Security策略 AuthenticationManagerBuilder:自定义认证策略 @Enabl

爱学习的大雄的博客 1万+

Spring Security框架全面解析与应用实践

摘要: Spring Security的核心架构基于Servlet过滤器链,通过DelegatingFilterProxy和FilterChainProxy实现安全处理。它支持多种客户端类型,提供CSRF防护、基础认证等内置功能,并允许细粒度安全配置。Spring Boot集成后自动配置默认安全规则,包括随机密码生成和BCrypt加密。核心过滤器如CsrfFilter、BasicAuthenticationFilter和AuthorizationFilter分别处理跨站防护、认证与授权流程。开发者可通过Ht

静水深流 1222

Spring Boot 3 集成 Spring Security(1)认证

Spring Security的重要核心功能功能是“认证”和“授权”,即**用户认证(Authentication)和用户授权(Authorization)**两部分:(1)用户认证:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求提供用户名和密码,系统通过校验用户名和密码来完成认证过程。(2)用户授权:验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。

Harry的博客 1961

Spring Boot Actuator监控实战:10个核心端点详解与应用

Spring Boot Actuator是Spring Boot框架中用于监控和管理应用程序的强大工具,它提供了丰富的端点来帮助开发者实时了解应用运行状态、性能指标和健康状况。通过Actuator,你可以轻松实现对Spring Boot应用的全方位监控,快速定位问题并优化系统性能。 ## 什么是Spring Boot Actuator? Spring Boot Actuator是Spring

gitblog_00207的博客 758

Spring Boot整合Spring Security实现JWT无状态认证实战指南

在微服务架构和前后端分离的现代Web开发中,认证与授权是保障系统安全的核心环节。传统的基于Session的认证方式在分布式场景下面临扩展性和跨域挑战,因此无状态认证方案应运而生。JWT(JSON Web Token)作为一种开放标准,通过将用户信息编码为JSON对象并签名,实现了安全、自包含的身份凭证传输。其技术价值在于彻底解耦了服务端会话状态,显著提升了系统的可扩展性和跨域支持能力,尤其适用于RESTful API和微服务间的安全通信。结合Spring Security这一强大的Java安全框架,开发者可

weixin_34008933的博客 1249

spring-boot-starter-security与应用安全

应用安全属于安全防护体系中的重要一环,但也是最薄弱的一环,究其原因,或许是应用的核心职责是完成业务和产品的功能需求,而安全确实非功能性需求,在资源有限的情况下,企业一定是更加注重将有限的资源投入到“开疆扩土”上去,否则,穷家破瓦的,也真没有什么值得安全防护的。 大部分应用开发者对应用安全知之甚少,而且安全一般属于一个企业或者业界秘而不宣的信息,所以,在没有一个专职的安全团队负责推动整个安全防护体系...

吴声子夜歌的博客 1万+

spring security原理和机制 | Spring Boot 35

一、SpringSecurity 框架简介 Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的 成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方 案。 正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控 制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权 (Authorization)两个部分,这两点也是 Spring

学Java,找哪吒 5万+

Spring Boot与Spring Security集成深度解析

Spring Security是一个功能强大的、可高度定制的安全和认证框架。它为基于Spring的应用提供了全面的认证和授权支持。Spring Security旨在为Java应用程序提供一个可靠的、可扩展的认证和访问控制解决方案。在Spring Security中,是核心的认证接口,负责从数据源加载用户信息。通常情况下,我们会使用Spring提供的默认实现,如,但在实际应用中,用户信息往往存储在数据库中,这就需要我们自定义实现。要实现自定义的,你需要按照以下步骤进行:创建实体类。

weixin_34618526的博客 1306

JavaWeb08-Spring Boot安全:使用Spring Security保护应用

身份认证(Authentication):验证用户是否为其声称的身份授权(Authorization):确定已认证用户是否有权限执行特定操作防护常见攻击:如CSRF(跨站请求伪造)、XSS(跨站脚本)、会话固定等集成多种认证机制:表单登录、HTTP Basic、OAuth2、OpenID等Spring Security的核心设计理念是"安全过滤器链"(Security Filter Chain),通过一系列过滤器拦截请求,完成认证和授权操作。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Apifox CLI + Claude Skills:将接口自动化测试融入ai

基于 Apifox CLI、Claude Code以及Claude Skills组合,实现自然语言触发接口自动化测试。

wwz_0012的博客 596

Spring Boot 安全框架 Shiro 与 Security 全面解析​

Spring Boot安全框架对比:Shiro与Spring Security解析 本文对比了Spring Boot中两种主流安全框架:Apache Shiro和Spring Security。从架构上看,Shiro采用"三大核心+四大辅助"的简洁设计,而Spring Security基于过滤器链实现。Shiro优势在于简单易用、跨平台性强,适合中小项目;Spring Security深度集成Spring生态,功能全面,更适合企业级应用。文章详细分析了两者的适用场景:Shiro适用于We

深耕 Java 后端与企业级软件架构设计,专注微服务、分布式系统、大模型 AI 应用架构落地。 1440

WinDbg调试工具安装全攻略:从下载到配置的保姆级教程(Windows 10/11适用)

本文提供了一份详细的WinDbg调试工具安装与配置指南,适用于Windows 10/11用户。文章对比了WinDbg Preview独立版与SDK内置经典版的区别,并手把手指导从Microsoft Store或Windows SDK完成安装。核心部分重点讲解了如何配置符号文件路径与源代码路径,这是让WinDbg发挥强大调试功能的关键步骤,并针对常见安装问题提供了实用的排错方法。

hp777的博客 380

STM32与K210串口通信

这篇文章是为了填上一篇埋下的坑,k210和STM32通过串口通信,我是采用数据包的形式发送数据的,因为K210发送的数据有几种,采用数据包的形式发送比较安全。本文代码运行的平台是STM32F103C8T6和K210 Dock,只涉及到K210发送数据给STM32,stm32将接受到的数据显示到0.96寸OLED屏上。

qq_70715693的博客 3万+

Spring Security Config : 注解 EnableWebSecurity 启用Web安全

@EnableWebSecurity是Spring Security用于启用Web安全的注解。通常将该注解用在某个Web安全配置类上(实现了接口WebSecurityConfigurer或者继承自WebSecurityConfigurerAdapter)。典型的使用例子如下 : @Configuration @EnableWebSecurity public class MyWebSecur...

Details Inside Spring 2万+

STM32H743IIT6+USB3300高速HID通讯实战:从CUBEMX配置到调试避坑全记录

本文详细记录了基于STM32H743IIT6微控制器与USB3300 PHY芯片实现高速USB HID通信的完整实战过程。内容涵盖从硬件选型、STM32CubeMX工程配置(重点规避引脚映射等常见陷阱)、自定义报告描述符编写,到驱动层数据收发实现与高级调试技巧的全链路解析,旨在帮助开发者快速构建稳定、高效的嵌入式高速数据通道。

vscode5coder的博客 361

探索Spring Boot与Spring Security的完美结合:spring-boot-security-example项目推荐

探索Spring Boot与Spring Security的完美结合:spring-boot-security-example项目推荐 在快速发展的技术领域中,安全无疑是每个Web应用开发的关键要素。今天,我们将深入探索一个精妙的开源项目——spring-boot-security-example,它巧妙地将Spring Boot的便捷性与Spring Security的强大安全性融合在一起,为开...

gitblog_00439的博客 748

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 286

Unity物理引擎实战:从刚体重心到碰撞体,打造真实不倒翁交互

刚体(Rigidbody)是Unity物理系统的核心组件,它定义了游戏对象的物理属性,如质量、阻力和碰撞响应。其原理基于牛顿力学,通过物理引擎(如PhysX)实时计算物体的运动状态。在游戏开发中,刚体的价值在于能够模拟真实世界的物理行为,为玩家提供沉浸式的交互体验。碰撞体(Collider)则定义了物体的形状边界,用于检测与其他物体的接触。通过精细调整刚体的重心(Center of Mass)和碰撞体形状,开发者可以模拟出各种有趣的物理现象,例如低重心物体的动态平衡。这在休闲游戏、物理玩具模拟等场景中尤为实

weixin_33976326的博客 352

深入解析Spring Boot Security:从基础到进阶的全面指导

Spring Security 是一个专为 Spring 应用提供认证和授权功能的框架,它广泛应用于 Web 应用、RESTful 服务以及微服务架构中。Spring Security 提供了身份验证(Authentication)、授权(Authorization)、会话管理、CSRF 防护、CORS 支持等功能。Spring Security 的强大之处在于其灵活性,开发者可以通过配置、扩展或者自定义实现具体的安全需求。

一碗黄焖鸡三碗米饭的博客 1687

Altium Designer 16安装教程(Windows11、小白教程)

Altium Designer 16在Windows11中的超详细安装教程

qq_47003770的博客 1万+

Spring Security 2026 最佳实践:构建安全的 Java 应用

Spring Security 2026 为 Java 应用提供了全面的安全解决方案。通过合理地应用 Spring Security 2026 的最佳实践,我们可以构建更安全、更可靠的 Java 应用。安全是一个持续的过程,需要不断地关注新的安全威胁和解决方案,保持系统的安全性。这其实可以更优雅一点。希望这篇文章能帮助大家更好地理解和实践 Spring Security 2026 的最佳实践。如果你有任何问题,欢迎在评论区留言。关于作者:我是 Alex,一个在 优快云 写 Java 架构思考的暖男。

alex_goden的博客 3918

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3800

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JavaSecLab项目架构解析:Spring Boot + Spring Security安全框架设计终极指南

JavaSecLab是一款综合型Java漏洞平台,基于Spring Boot和Spring Security构建,为应用安全学习、代码审计训练和开发安全培训提供全面的漏洞演示环境。🎯 本文深入剖析JavaSecLab的架构设计,特别是其Spring Boot + Spring Security安全框架的实现原理,帮助您理解如何构建一个功能完善的企业级安全教学平台。 ## 📋 项目概述与技术栈

gitblog_00343的博客 361

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Spring Boot 集成 Apache Shiro:实现安全认证与授权
下一篇: Spring Boot 集成 OAuth2:实现安全认证与授权
一个差不多的先生
博客等级 码龄12年 928粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值