SpringBoot3整合SpringSecurity6(一)快速入门
大家好,我是晓凡。
写在前面
不知道小伙伴们在学SpringSecurity过程中有没有和我一样的经历和烦恼。
①看完一篇文章或者一个教程,感觉学会了。但是一到实际项目中就不知道怎么用;
②被SprintSecurity 源码和各种专业名词搞得一头雾水,不知道如何下手,直接劝退;
③技术更新迭代非常快,网上一些文章教程知识点已经过时了,在新版本中已经不适用了。
晓凡在学习过程中也同样遇到了这些问题,也被劝退过。但是,现在的安全框架也就那么几个,难啃也得硬着头皮上。
原本打算一篇文章写完,但是基于SprintSecurity涉及到的知识点确实挺多,文章篇幅肯定很长。
基于这些原因,晓凡打算将SpringBoot3整合SpringSecurity6写成一个系列文章,文章尽可能的通俗易懂,循序渐进,并穿插实际项目开发实例。
让小伙伴们学起来没啥压力,学完之后能将SpringSecurity运用到实际项目中。
当然,每个人的理解方式不同,可能有些重要的细节没讲到位,欢迎大家在评论区提问。受限于个人水平,一定有说的不对的地方,大家理解一下,友善白嫖哈。
一、环境说明
现在技术更新迭代真的很快,不少小伙伴还在抱怨,怎么又更新了,学不动了。晓凡也采用当前最新稳定版本的进行讲解,具体如下
SpringBoot 3.2.0SpringSecurity 6.2.0JDK 17MySQL 8.0
二、SpringSecurity 简介
SpringSecurity 是Spring大家族中一名重要成员,是专门负责安全的框架。
提到安全框架,做过Java开发的小伙伴可能还听说过Shiro。Shiro相对于Spring Security来说,更加简单。一般小型项目使用得比较多,
这里就不展开说了,感兴趣的小伙伴可以评论区留言,晓凡后面出教程。Spring Security一般用在中大型项目中。
Spring Security 能为项目做什么呢?
我们来看看官方文档:https://docs.spring.io/spring-security/reference/index.html怎么说的?

翻译过来大概就是:Spring Security 是一个提供了身份验证、授权和防止常见攻击的功能的框架。
三、常用名词解释
上面提到了身份验证、授权和防止常见攻击 三个专业名词。晓凡这里以小区中的保安系统来说明,大家肯定就秒懂了。
为了小区的安全,小区上了保安系统,确保只有合法的居民可以进入小区,并且他们只能访问自己的家,同时防止小偷和法外狂徒张三进来捣乱。
- 身份认证(Authentication):
- 就是确认你是谁的过程。
Spring Security会要求你提供一些信息,比如用户名和密码,然后它会检查这些信息是否正确。如果信息正确,就相当于给你发了一张小区的门禁卡,你就可以进入小区了。
- 就是确认你是谁的过程。
- 授权(Authorization):
- 就是决定你可以做什么的过程。即使你进了小区,也不能随便去别人家。
Spring Security会检查你是否有权限去某个地方,比如你的家。你有权限,就可以进入;而隔壁老王,没有你家的权限,就会被拒之门外。
- 就是决定你可以做什么的过程。即使你进了小区,也不能随便去别人家。
- 防御常见攻击:
- 就像小区保安要防止小偷和张三一样,
Spring Security也提供了很多功能来防止各种网络攻击:- CSRF(跨站请求伪造):防止有人伪造你的请求,比如在你不知情的情况下,让你的账号发一些你不想要的帖子。
- XSS(跨站脚本攻击):防止有人通过网页注入恶意脚本,偷取你的个人信息。
- SQL注入:防止有人通过输入特殊的命令,来操纵数据库,获取或破坏数据。
- 点击劫持:防止有人通过一些手段,让你在不知情的情况下点击一些链接,从而执行一些你不想执行的操作。
- 就像小区保安要防止小偷和张三一样,
四、快速入门
说了一堆理论知识,下面晓凡带着大家敲代码,快速上手
4.1 搭建一个Spring Boot Web项目
① 创建SecurityQuickStart项目

② 创建controller
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "晓凡,你好!";
}
}
③ 启动项目,浏览器访问/hello接口
浏览器中访问:http://localhost:8080/hello

4.2 引入SpringSecurity
① 引入依赖
在SpringBoot项目中使用SpringSecurity,我们只需要引入如下依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
② 访问接口
依然在浏览器中输入:http://localhost:8080/hello
这时候,我们发现hello接口不能访问了,而是跳转到一个登录页面:http://localhost:8080/login

这时候我们需要输入用户名和密码才能访问接口
用户名默认为:user
密码会在控制台中打印出来

注意:如果你没使用魔法上网,可能登录页面会如下图所示一样

遇到这样的,小伙伴也不用慌,这是由于访问不了bootstrap.min.css样式造成的,并不影响正常业务流程

点击"Sign in"进行登录,就可以正常访问接口了

4.3 配置默认用户/密码
默认情况下SpringSecurity 会为我们默认生成一个user用户,密码采用uuid随机生成(通过下图中SecurityProperties类的静态内部类user生成)。

我们还可以通过application.yml配置文件来配置用户名和密码
spring:
security:
user:
password: 123456
name: admin
通过上面配置之后,控制台将不再输出随机生成的密码,我们也可以通过admin/123456 登录
4.4 注销
既然能登陆,那必然也是可以注销的。
我们只需浏览器输入:http://localhost:8080/logout 然后点击Log Out 即可注销

五、SpringSecurity 默认做了什么?
到这儿,我们算是正是入门了。其实我们出了引入依赖,其他啥也没干。那么SpringSecurity默认为我们做了些什么?
① 保护我们创建的/hello接口,不是随便一个老王就能来访问,要求对应用程序的任何交互进行身份验证;
② 程序启动时生成一个默认用户“user”;
③ 生成一个默认的随机密码,并将此密码记录在控制台上;
④ 生成默认的登录表单和注销页面,并提供登录和注销功能;
⑤ 对于请求,重定向到登录页面
本期内容到这儿就结束了,希望对您有所帮助。
我们下期再见~ ヾ(•ω•`)o (●'◡'●)
SpringBoot3整合SpringSecurity6(一)快速入门的更多相关文章
- Shiro第四篇【Shiro与Spring整合、快速入门、Shiro过滤器、登陆认证】
Spring与Shiro整合 导入jar包 shiro-web的jar. shiro-spring的jar shiro-code的jar 快速入门 shiro也通过filter进行拦截.filter拦 ...
- spring-data-jpa快速入门(一)——整合阿里Druid
一.概述 官网:https://projects.spring.io/spring-data-jpa/ 1.什么是spring-data-jpa Spring Data JPA, part of th ...
- SpringBoot整合ActiveMQ快速入门
Spring Boot 具有如下特性: 为基于 Spring 的开发提供更快的入门体验 开箱即用,没有代码生成,也无需 XML 配置.同时也可以修改默认值来满足特定的需求. 提供了一些大型项目中常见的 ...
- 消息中间件——RabbitMQ(五)快速入门生产者与消费者,SpringBoot整合RabbitMQ!
前言 本章我们来一次快速入门RabbitMQ--生产者与消费者.需要构建一个生产端与消费端的模型.什么意思呢?我们的生产者发送一条消息,投递到RabbitMQ集群也就是Broker. 我们的消费端进行 ...
- (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中
利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目 Dao (jar) Service (jar) Controller (web) ...
- springboot2.0整合freemarker快速入门
目录 1. 快速入门 1.1 创建工程pom.xml文件如下 1.2 编辑application.yml 1.3 创建模型类 1.4 创建模板 1.5 创建controller 1.6 测试 2. F ...
- SpringBoot3.0 + SpringSecurity6.0+JWT
JWT_SpringSecurity SpringBoot3.0 + SpringSecurity6.0+JWT Spring Security 是 Spring 家族中的一个安全管理框架. 一般We ...
- Swift语言快速入门
Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- Spark快速入门 - Spark 1.6.0
Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...
- 快速入门系列--WebAPI--01基础
ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...
随机推荐
- 斩获“年度突破成果”奖!天翼云构建强大AI算力基础,制胜人工智能新时代
8月18-19日,2023中国算力大会在宁夏银川举办.在大会"年度突破成果"发布环节,中国电信天翼云<基于异构多云环境下的息壤算力调度应用实践>荣获2023中国算力大会 ...
- 硬件设计:逻辑电平--LVDS
参考资料:关于LVDS电平 LVDS电平 PECL.LVDS和CML电平 高速数字逻辑电平(8)之LVDS LVDS自学笔记 LVDS用户手册 LVDS和M-LVDS电路实施指南 LVDS(Low-V ...
- Flink 部署和整体架构
一.Flink运行部署模式和流程 部署模式: 1.Local 本地部署,直接启动进程,适合调试使用 2.Standalone Cluster集群部署,flink自带集群模式 3.On Yarn 计算资 ...
- Nginx~启动!!
前言 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.r ...
- DeepSeek实战:3分钟学会提取网页纯文本!(含提示词)
DeepSeek实战:3分钟学会提取网页纯文本!(含提示词) | 原创作者/编辑:凯哥Java | 分类:人工智能学习系列教程 大家好,我是凯哥Java. ...
- 【.NET】调用本地 Deepseek 模型
本篇咱们来聊一聊怎么在 .NET 代码中使用本地部署的 Deepseek 语言模型.大伙伴们不必要紧张,很简单的,你不需要学习新知识,只要你知道 .NET 如何访问 HTTP 和 JSON 的序列化相 ...
- 在Android源码中为APK编译系统权限
系统权限获取 打包为APK进行系统签名 对于 部分功能的访问需要使用到系统权限,需要 添加 android:sharedUserId="android.uid.system" 权限 ...
- Win10、Win11老游戏运行补丁(cnc-ddraw),适用于红色警戒、帝国时代等经典游戏
Win11.Win10老游戏运行补丁(cnc-ddraw),适用广泛,红色警戒(红警),直接复制到游戏目录,然后即可畅玩.再也不需要修改:管理员运行,兼容性运行,更改DPI.cnc-ddraw 可以修 ...
- typecho引入五秒盾,缓解服务器压力
功能是:对访客的访问频率会先一步判断,根据用户自定义的范围,将频率过高的访客跳转向127.0.0.1,而没有达到频率的访客则会进行cookies验证,这样更大程序的对恶意流量攻击进行拦截,并且有效缓解 ...
- docker - [09] 镜像详解
题记部分 一.镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,还包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 如果得到 ...