程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • SpringSecurity

    • Spring Security是什么
    • 认证与授权的基本概念
    • Spring Security 的默认配置
      • 1. Spring Security 默认配置概述
      • 2. 项目搭建与依赖配置
      • 3. 默认行为验证
      • 4. Spring Security 默认配置的扩展
    • SpringSecurity的默认登录页
    • Spring Security 的 Filter 机制
    • HttpSecurity 与自定义登录页面
    • Spring Security 的核心组件与扩展
    • Spring Security 中的用户认证与角色管理
    • Spring Security 的授权机制与安全表达式
    • Security 的 Session 与 Token 管理
    • Spring Security 集成第三方登录
    • Spring Security 集成 QQ 登录与 JWT 认证
    • Spring Security 登录认证源码
    • Spring Security - JWT认证实战
    • Spring Security - JWT授权实战
    • Spring Security 异常处理与自定义逻辑
  • SpringSecurity
  • SpringSecurity
scholar
2024-08-20
目录

Spring Security 的默认配置

# Spring Security 的默认配置

前言

Spring Security 在引入后提供了一套默认的认证和授权机制,帮助开发者快速构建一个具有基本安全防护的应用。这套默认配置涵盖了认证、授权、CSRF 防护、登录页面生成等功能。

# 1. Spring Security 默认配置概述

Spring Security 在引入项目时,自动应用了一些默认的安全配置。以下是它默认提供的功能:

  1. 自动生成登录页面:

    • 当用户访问受保护的资源时(如未公开的页面或 API 接口),Spring Security 会自动跳转到一个默认的登录页面,路径为 /login。
    • 该页面包含基本的用户名和密码输入框,并处理用户登录逻辑。
  2. 默认用户和密码:

    • 系统默认创建一个用户名为 user 的用户。
    • 密码是随机生成的,在应用启动时打印在控制台。每次启动应用时,这个密码都会重新生成。例如:
    Using generated security password: 8a8e5d2a-4a8d-4bf2-b8b3-0d0f95b6b68d
    
    1
    • 该默认用户具有访问所有受保护资源的权限。
  3. 所有请求需要认证:

    • Spring Security 默认要求所有 HTTP 请求都需要认证。除非你显式配置某些路径为公开访问,否则所有请求都会被保护,要求用户先登录。
  4. 表单登录:

    • 默认启用了表单登录功能。当用户访问需要认证的资源但尚未登录时,系统会自动重定向到默认的登录页面 /login。
    • 登录成功后,系统会自动将用户重定向到原始请求的页面。如果用户直接访问 /login 并登录成功,则会跳转到根路径 /。
  5. 注销功能:

    • 默认启用了注销功能,用户可以通过访问 /logout 来退出登录。
    • 注销成功后,系统会重定向到登录页面 /login?logout,并显示一条提示信息。
  6. CSRF 防护:

    • 默认情况下,Spring Security 自动启用 CSRF(跨站请求伪造)防护,保护表单提交和敏感操作免受 CSRF 攻击。
    • CSRF 令牌会自动嵌入到表单中,确保每个表单提交的请求是合法且安全的。
  7. HTTP 基本认证支持:

    • Spring Security 还默认支持 HTTP Basic 认证,这种认证方式通常用于保护 REST API 接口。
    • 通过在请求头中使用 Authorization: Basic <Base64编码的用户名和密码>,Spring Security 会根据提供的凭据进行认证。
  8. 会话管理:

    • 默认情况下,Spring Security 会在用户登录成功后创建一个会话,并将用户的认证信息保存在 SecurityContext 中。
    • Spring Security 管理会话的生命周期,确保用户信息在多个请求之间保持一致。
  9. 默认异常处理:

    • 当用户尝试访问未授权的资源时,Spring Security 会返回一个默认的“403 Forbidden”错误页面。
    • 当用户未登录但尝试访问受保护资源时,系统会自动重定向到登录页面。

# 2. 项目搭建与依赖配置

首先,你需要在 Spring Boot 项目中引入 Spring Security 依赖。Spring Security 的依赖配置如下:

pom.xml 配置:

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13

添加上述依赖后,Spring Security 会自动应用默认配置,为你的应用提供基本的安全防护。

# 3. 默认行为验证

在默认配置生效的情况下,你可以通过以下步骤验证 Spring Security 的默认行为:

  1. 启动应用:

    • 在未做任何自定义配置的情况下,启动 Spring Boot 应用。
  2. 访问受保护资源:

    • 访问如 http://localhost:8080/,系统会自动重定向到默认的登录页面 /login,要求你输入用户名和密码。
  3. 使用默认用户登录:

    • 默认用户名:user
    • 密码:启动时控制台打印的随机密码。
  4. 登录成功后验证:

    • 登录成功后,系统会自动重定向到你尝试访问的受保护资源,或跳转到根路径 /。
  5. 注销:

    • 访问 http://localhost:8080/logout,你可以退出登录,并重定向回登录页面。
  6. CSRF 防护验证:

    • 在表单提交时,CSRF 令牌会自动生成并嵌入到表单中。请求中必须包含有效的 CSRF 令牌,否则请求将被拒绝。

# 4. Spring Security 默认配置的扩展

虽然 Spring Security 的默认配置非常方便,但在实际项目中,你通常需要进行自定义配置。以下是一些常见的扩展需求:

  • 自定义登录页面:替换默认的登录页面为自定义页面。
  • 自定义用户认证:替换内存中的用户信息为数据库或其他来源的用户信息。
  • 自定义路径访问控制:定义哪些路径可以匿名访问,哪些路径需要认证。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
认证与授权的基本概念
SpringSecurity的默认登录页

← 认证与授权的基本概念 SpringSecurity的默认登录页→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式