SpringBoot3与SpringSecurity6整合快速入门
笔记哥 /
04-15 /
43点赞 /
0评论 /
763阅读
### 一、环境说明
>
>
> 现在技术更新迭代真的很快,不少小伙伴还在抱怨,怎么又更新了,学不动了。晓凡也采用当前最新稳定版本的进行讲解,具体如下
>
- `SpringBoot 3.2.0`
- `SpringSecurity 6.2.0`
- `JDK 17`
- `MySQL 8.0`
### 二、SpringSecurity 简介
`SpringSecurity ` 是`Spring`大家族中一名重要成员,是专门负责安全的框架。
提到安全框架,做过Java开发的小伙伴可能还听说过`Shiro`。`Shiro`相对于`Spring Security`来说,更加简单。一般小型项目使用得比较多,
这里就不展开说了,感兴趣的小伙伴可以评论区留言,晓凡后面出教程。`Spring Security`一般用在中大型项目中。
**`Spring Security `能为项目做什么呢?**
我们来看看**官方文档:**怎么说的?

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

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

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

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

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

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

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

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

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

### 五、SpringSecurity 默认做了什么?
到这儿,我们算是正是入门了。其实我们出了引入依赖,其他啥也没干。那么`SpringSecurity`默认为我们做了些什么?
① 保护我们创建的/hello接口,不是随便一个老王就能来访问,要求对应用程序的任何交互进行身份验证;
② 程序启动时生成一个默认用户“user”;
③ 生成一个默认的随机密码,并将此密码记录在控制台上;
④ 生成默认的登录表单和注销页面,并提供登录和注销功能;
⑤ 对于请求,重定向到登录页面
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/2267
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利