【SpringSecurity新手村系列】(1)初识安全框架

简介: 本文从零开始引入 Spring Security,演示默认登录页与接口保护效果,并解释认证、授权与过滤器链的基础机制,帮助你快速建立安全开发的整体认知。

第一章 初识安全框架

本章将带领读者创建一个全新的 Spring Boot 项目并引入 Spring Security,体验框架的默认安全机制。

在 Web 应用开发中,用户认证与授权是基础且核心的功能模块。当我们在一个空白的 Spring Boot 项目中引入 Spring Security 依赖后,系统会自动生成登录页面并保护所有接口。这种"开箱即用"的安全防护是如何实现的?本篇文章将为你揭晓答案。


一、问题切入

假设我们创建了一个最简单的 Spring Boot Web 项目,添加了一个 REST 接口:

@RestController
public class SecurityController {
   
    @RequestMapping("/security")
    public String hello() {
   
        return "hello world";
    }
}

启动项目后,访问 http://localhost:8080/security,会发生什么?

答案是:浏览器会强制重定向到一个登录页面,要求输入用户名和密码。无需编写任何安全相关代码,Spring Security 已经自动为我们"保护"了整个应用。

这种自动保护是如何做到的?我们又该如何自定义?


二、解决方案:引入依赖即可

pom.xml 中添加以下核心依赖:

<dependencies>
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

仅需引入这两个依赖,Spring Security 便会在应用启动时自动配置一套完整的安全防护体系。


三、原理阐释

3.1 Spring Security 核心特性

根据 Spring Security 官方文档,该框架提供以下核心特性:

  • Authentication(认证):验证用户身份,确认登录者是谁
  • Authorization(授权):决定用户可以访问哪些资源
  • 攻击防护:防止 session fixation、clickjacking、CSRF 等攻击
  • Servlet API 集成:与 Java Servlet 完美整合
  • 可选的 Spring Web MVC 集成

3.2 核心过滤器

spring-boot-starter-security 被引入后,Spring Security 会自动配置一组过滤器(Security Filter Chain):

过滤器 作用
SecurityContextPersistenceFilter 持久化安全上下文
HeaderWriterFilter 写入安全响应头
LogoutFilter 处理登出请求
UsernamePasswordAuthenticationFilter 处理表单登录认证
DefaultLoginPageGeneratingFilter 生成默认登录页
DefaultLogoutPageGeneratingFilter 生成默认登出页
CsrfFilter 防止跨站请求伪造
AuthorizationFilter 权限检查

3.3 请求处理流程

用户访问受保护资源
    ↓
Security Filter Chain(层层过滤)
    ↓
未认证? → 重定向到 /login 登录页
    ↓
已认证 → 放行到目标 Controller

3.4 默认用户管理器

框架默认使用 InMemoryUserDetailsManager,用户信息通过配置文件指定。这是一种仅适用于开发测试的简单用户管理方式。


四、配置默认用户

application.yml 中指定默认用户:

spring:
  application:
    name: springsecurity-flittly

  security:
    user:
      name: flittly
      password: 123456

server:
  port: 8080

或者在 application.properties 中:

spring.security.user.name=flittly
spring.security.user.password=123456

五、登录验证

完成以上配置后,启动项目:

  1. 访问 http://localhost:8080/security
  2. 浏览器自动重定向到 http://localhost:8080/login
  3. 显示 Spring Security 默认登录页面
  4. 输入用户名 flittly,密码 123456
  5. 登录成功,显示 "hello world"

六、安全防护机制

Spring Security 默认启用以下安全防护:

  • CSRF 防护:防止跨站请求伪造
  • Security Headers:添加安全响应头
  • Session Fixation 防护:防止会话固定攻击
  • 默认安全行为:所有端点需要认证

七、总结

通过本篇文章,我们了解到:

  1. 仅需引入 spring-boot-starter-security 依赖,系统即刻获得安全防护
  2. 框架自动配置一组安全过滤器(Security Filter Chain)
  3. 默认用户通过配置文件指定(仅适用于开发测试)
  4. 提供认证(Authentication)和授权(Authorization)两大核心功能
  5. 内置多种安全攻击防护机制

下一篇文章我们将介绍如何整合 MyBatis,实现基于数据库的用户认证。


编辑者:Flittly
更新时间:2026年4月

目录
相关文章
|
1月前
|
Java 数据库连接 数据库
【SpringSecurity新手村系列】(2)整合 MyBatis 实现数据库认证
本文讲解如何将 MySQL 与 MyBatis 接入 Spring Security,通过自定义 UserDetailsService 实现数据库认证,并说明 PasswordEncoder、Mapper/XML 与登录流程的关键实现点。
136 1
|
2月前
|
人工智能 前端开发 Java
【SpringAIAlibaba新手村系列】(4)流式输出与响应式编程
本文围绕 Spring AI 中的流式输出与响应式编程展开,重点解释了传统一次性响应与流式返回的差异,以及 Flux 在异步数据流中的核心作用。文章结合 ChatModel.stream() 与 ChatClient 的多种代码示例,说明如何实现 AI 内容的边生成边返回,并帮助读者理解流式调用在用户体验、性能和长文本场景中的实际价值。
976 4
【SpringAIAlibaba新手村系列】(4)流式输出与响应式编程
|
1月前
|
安全 前端开发 搜索推荐
【SpringSecurity新手村系列】(3)自定义登录页与表单认证
自定义登录页与表单认证本文围绕自定义登录页展开,详解 formLogin、loginProcessingUrl 与跳转配置,重点解释 CSRF 隐藏域的作用、校验原理及常见错误,帮助你稳定完成表单登录改造。
151 6
|
24天前
|
JSON 前端开发 API
【LangGraph新手村系列】(1)LangGraph 入门:StateGraph 与带记忆的 ReAct 循环
介绍 LangGraph 核心思想:用 StateGraph 把单次 LLM 调用串成可循环的 ReAct 工作流。通过节点、边与公共状态黑板,实现模型思考、工具调用、条件跳转的闭环,并引入检查点让 Agent 拥有跨轮次记忆。
365 1
【LangGraph新手村系列】(1)LangGraph 入门:StateGraph 与带记忆的 ReAct 循环
|
人工智能 NoSQL Java
【SpringAIAlibaba新手村系列】(8)持久化会话与 Redis 内存管理
本文详解 Spring AI 的会话记忆机制,从内存版 MemorySaver 到 Redis 版 RedisSaver,实现 AI 对话的上下文连续性。文章以 ReactAgent 为核心,讲解如何通过 threadId 管理会话线程,并将 Agent 状态持久化到 Redis 中。
792 5
|
1月前
|
人工智能 Java API
【SpringAIAlibaba新手村系列】(2)Ollama 本地大模型调用
本章详解如何用Spring AI接入Ollama本地大模型:解决远程调用的联网依赖、隐私泄露与费用问题;支持Qwen、Llama等开源模型,零成本、低延迟、全离线运行;重点掌握`@Qualifier`多模型注入、流式响应(Flux)及本地API(`http://localhost:11434`)集成。
824 5
|
1月前
|
NoSQL Java 数据库
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
本文围绕 Embedding 与向量数据库展开,讲解了文本向量化、相似度检索和 VectorStore 的基本用法,并结合 SimpleVectorStore 示例说明了 Spring 中自动装配与手动注册 Bean 的区别,为后续学习 RAG 打下基础。
704 5
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
|
1月前
|
人工智能 JSON Java
【SpringAIAlibaba新手村系列】(6)PromptTemplate 提示词模板与变量替换
本章详解Spring AI的PromptTemplate提示词模板机制,涵盖变量替换、系统消息模板(SystemPromptTemplate)、外部文件加载等核心功能,助力实现提示词参数化、复用与动态组装,提升RAG、Agent及结构化输出场景下的开发效率与可维护性。
365 6
|
1月前
|
人工智能 Java API
【SpringAIAlibaba新手村系列】(18)Agent 智能体与今日菜单应用
本章以 ReactAgent 为入口,将本地菜单工具与 MCP 外部工具合并注册,统一通过 /eatAgent 执行任务,展示 Agent 在多工具协同下的意图理解、工具调用与结果整合能力。
390 3
|
人工智能 JavaScript Java
【SpringAIAlibaba新手村系列】(1)初识 Spring AI Alibaba 框架
本文介绍了SpringAIAlibaba框架的基本概念和使用方法。作为Spring官方AI框架的阿里云实现版本,它简化了Java开发者调用AI模型的过程。文章详细讲解了核心概念如ChatModel、ChatClient,以及阿里云百炼平台的功能。通过HelloWorld项目示例,展示了如何配置APIKey、编写控制层代码,实现普通调用和流式输出两种AI交互方式。重点阐述了SpringAI与SpringAIAlibaba的关系,以及自动配置机制的工作原理,帮助开发者快速上手这一框架。
4290 5

热门文章

最新文章