01Spring Security框架

Spring Security是什么?

Spring Security是⼀个提供身份验证、授权和针对常见攻击的保护的框架。

Spring Security做什么?

作为开发⼈员,在⽇常开发过程中需要⽤到Spring Security的场景⾮常多。事实上,对Web应⽤程序⽽⾔,除了分布式环境下的认证和授权漏洞,常⻅的安全性问题还包括跨站点脚本攻击、跨站点请求伪造、敏感数据暴露、缺乏⽅法级访问控制等。针对这些安全性问题,开 发⼈员都需要全⾯设计并实现对应的安全性功能,⽽Spring Security已经为开发⼈员提供了相应的解决⽅案,主要包括如下内容:
  1. ⽤户信息管理。
  2. 敏感信息加解密。
  3. ⽤户认证。
  4. 权限控制。
  5. 跨站点请求伪造保护。
  6. 跨域⽀持。
  7. 全局安全⽅法。
  8. 单点登录。

搭建Spring Security应用

在idea中构建一个Spring Security的应用,选择Spring Web和Spring Security来让idea自动引入对应的maven坐标。

应用构建完成后,自行创建一个控制器类,用户测试访问:

package com.example.springsecurity.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SampleController {@GetMapping("/hello")public String hello() {return "Hello World";}
}

设置应用启动的端口

启动应用,控制台会输出一串密码:

浏览器访问新建的控制器,会自动跳转到登录页面,用户名:user,密码是控制台输出的字符串。

登录成功后,就可以看到控制器返回的信息。

如果没有使用Spring Security框架,就不会弹出登录页面,而是直接返回结果。

两种认证模式

在日常开发中,一般不会这么使用,常见的使用方法包括两种形式:表单认证、基础认证

表单认证

表单认证是默认的认证模式。

表单认证⽤于减轻每个请求都必须重新认证的压⼒。⼤多数基于表单的身份认证实现使⽤标准HTML表单字段通过POST请求将⽤户名和密码值传递给服务器。

服务器验证所提供的凭据,并创建⼀个Session会话(有状态),该会话绑定到存储在cookie中的SessionId,并在每个http请求上在客户端和服务器之间传递。如果cookie⽆效或⽤户注销,则服务器通常会重定向到登录页面。

用户登录完成,服务器会生成sessionID,sessionID会自动返回给浏览器并放在cookie中,后面发送的请求,都会带上sessionID,服务器端根据sessionID进行认证。

基础认证
HTTP基础认证的原理⽐较简单,只是通过HTTP的消息头携带⽤户名和密码进⾏登录验证。

在代码中新增SecurityConfiguration类,完成基础认证操作。

package com.example.springsecurity;
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.web.SecurityFilterChain;
import static org.springframework.security.config.Customizer.withDefaults;@Configuration
public class SecurityConfiguration {@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests((authz) -> authz.anyRequest().authenticated()  //任何请求都要认证).httpBasic(withDefaults());//开启基础认证模式return http.build();}
}

启动应用

用户名:user,密码是控制台中输入的字符串。

登录完成,返回了接口信息。

浏览器控制台,可以看到 authorization:Basic dXNlcjphYWEwZjcwNy0wNGViLTQ3YjUtODAxZi0xZmM4NmVmMjAzYjg=,这就是基础认证的信息,Basic表示基础认证,后面的字符串是用户名和密码通过base64编码后的信息。

小技巧:除了使用浏览器访问接口,还可以直接在idea使用idea内置的http客户端,来调用接口,这种方式一般用于接口的测试。操作方法如下:

在控制器方法上,点击圆形的地球图标

idea会自动生成这个文件

直接点击绿色的执行图标,控制台会输出401,代表没有认证通过。

此时,添加认证信息:

authorization:Basic dXNlcjphYWEwZjcwNy0wNGViLTQ3YjUtODAxZi0xZmM4NmVmMjAzYjg=


两种认证模式的区别

表单认证速度更快,效率更高,因为只在第一次请求时根据用户名和密码进行验证,第一次验证通过,服务器端会生成sessionID,sessionID会保存到浏览器的cookie,后续的请求会从cookie中取出sessionID,将sessionID发送给服务器,服务器拿到sessionID后判断sessionID是否存在,存在即有效请求。

基础认证模式,在服务器端不保留信息,不使用cookie,没有会话或注销用户的概念,每个请求都必须携带Request Header才能进行身份验证。


两种认证模式的应用场景

基础认证:对外api接口

表单认证:企业网站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34527.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「BWAPP靶场通关记录(1)」A1注入漏洞

BWAPP通关秘籍(1):A1 injection 1.HTML Injection - Reflected (GET)1.1Low1.2Medium1.3High 2.HTML Injection - Reflected (POST)2.1Low2.2Medium2.3High 3.HTML Injection - Reflected (URL)3.1Low3.2/3.3Medium/HIgh 4.HTML Injection - …

机器学习算法实战——敏感词检测(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 随着互联网的快速发展,信息传播的速度和范围达到了前所未有的高度。然而,网络空间中也充斥着大量的…

Ollama+DeepSeek+NatCross内网穿透本地部署外网访问教程

目录 一、Ollama 简介 二、下载Ollama 三、下载并运行 DeepSeek 模型 四、运行 DeepSeek 模型 五、NatCross免费内网穿透 六、配置 ChatBox 连接 Ollama 七、外网使用ChatBox体验 一、Ollama 简介 Ollama 是一个开源的本地大模型部署工具,旨在让用户能够在个…

联想台式电脑启动项没有U盘

开机按F12,进入启动设备菜单,发现这里没有识别到插在主机的U盘? 解决方法 1、选上图的Enter Setup或者开机按F2,进入BIOS设置 选择Startup -> Primary Boot Sequence 2、选中“Excludeed from boot order”中U盘所在的一行 …

开源链动 2+1 模式 AI 智能名片 S2B2C 商城小程序助力社群发展中榜样影响力的提升

摘要:本文深入剖析了社群发展进程中榜样所承载的关键影响力,并对开源链动 21 模式 AI 智能名片 S2B2C 商城小程序在增强这一影响力方面所具备的潜力进行了全面探讨。通过对不同类型社群,如罗辑思维社群和 007 不出局社群中灵魂人物或意见领袖…

《交互式线性代数》

《交互式线性代数》 *Interactive Linear Algebra*由Dan Margalit和Joseph Rabinoff编写,是一本聚焦线性代数的教材。本书旨在教授线性代数的核心概念、方法及其应用,通过代数与几何相结合的方式,帮助读者深入理解线性代数的本质&#xff0c…

CSS -属性值的计算过程

目录 一、抛出两个问题1.如果我们学过优先级关系,那么请思考如下样式为何会生效2.如果我们学习过继承,那么可以知道color是可以被子元素继承使用的,那么请思考下述情景为何不生效 二、属性值计算过程1.确定声明值2.层叠冲突3.使用继承4.使用默…

生活中的可靠性小案例11:窗户把手断裂

窗户把手又断了,之前也断过一次,使用次数并没有特别多。上方的图是正常的把手状态,断的形状如下方图所示。 这种悬臂梁结构,没有一个良好的圆角过渡,导致应力集中。窗户的开关,对应的是把手的推拉&#xff…

怎么解决在Mac上每次打开文件夹都会弹出一个新窗口的问题

在Mac上每次打开文件夹都会弹出一个新窗口的问题,可以通过以下方法解决‌ ‌调整Finder设置‌: 打开Finder,点击“Finder”菜单,选择“偏好设置”。在偏好设置中,选择“通用”标签。取消勾选“在标签页中打开文件夹”或…

HOT100——栈篇Leetcode739. 每日温度

文章目录 题目:Leetcode160. 相交链表原题链接思路代码 题目:Leetcode160. 相交链表 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温…

C++ 返回值优化(Return Value Optimization)

Intro 返回值优化(Return Value Optimization, RVO)是 C中的一种编译器优化技术, 它允许编译器在某些情况下省略临时对象的创建和复制/移动操作, 从而提高程序性能. RVO 主要应用于函数返回值的场景. 两种形式的 RVO 假定我们有这样一个类: class MyClass {std::string nam…

C++内存管理(复习)

1.动态申请多个某类型的空间并初始化 //动态申请10个int类型的空间并初始化为0到9int* p new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; delete[] p; //销毁 2.new/delete new:开空间构造函数 delete:析构函数释放空间 new和delete是用户进行动态内存申请和释放的操作符&#…

计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法

引言 卷积神经网络(Convolutional Neural Networks,简称 CNNs)是一种深度学习架构,专门用于处理具有网格结构的数据,如图像、视频等。它们在计算机视觉领域取得了巨大成功,成为图像分类、目标检测、图像分…

Java数据结构第二十三期:Map与Set的高效应用之道(二)

专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、哈希表 1.1. 概念 1.2. 冲突 1.3. 避免冲突 1.4. 解决冲突 1.5. 实现 二、OJ练习 2.1. 只出现一次的数字 2.2. 随机链表的复制 2.3. 宝石与石头 一、哈希表 1.1. 概念 顺序结构以及平衡树中…

OSPF | LSDB 链路状态数据库 / SPF 算法 / 实验

注:本文为 “OSPF | LSDB / SPF ” 相关文章合辑。 LSDB 和 SPF 算法 潇湘浪子的蹋马骨汤 发布 2019-02-15 23:58:46 1. 链路状态数据库 (LSDB) 链路状态协议除了执行洪泛扩散链路状态通告(LSA)以及发现邻居等任务外,其第三个任…

Android Framework 之了解系统启动流程二

Android Framework 源码阅读系列篇章有: 系统启动流程一之init进程和zygote进程启动分析系统启动流程二之SystemServer进程启动分析 1. SystemServer 进程启动分析 在 系统启动流程一之init进程和zygote进程启动分析 中分析 zygote 进程时,我们知道了…

阿里云企业邮箱出现故障怎么处理?

阿里云企业邮箱出现故障怎么处理? 以下是处理阿里云企业邮箱故障的详细分步指南,帮助您快速定位问题并恢复邮箱正常使用: 一、初步排查:确认故障范围与现象 确定影响范围 全体用户无法使用 → 可能为阿里云服务端故障或网络中断。…

Python----数据分析(Pandas二:一维数组Series,Series的创建,Series的属性,Series中元素的索引与访问)

一、一维数组Series Series:一维数组,与Numpy中的一维array类似。它是一种类似于一维数组的对象,是由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。 仅由一组数据也可产生简单的 Series 对象,用值列表生成 Series …

小程序配置

注册小程序账号和安装开发工具 参考文档:注册小程序账号和安装开发工具https://blog.csdn.net/aystl_gss/article/details/127878658 HBuilder新建项目 填写项目名称,选择UNI-APP,修改路径,点击创建 manifest.json 配置 需要分别…

前端UI编程基础知识:基础三要素(结构→表现→行为)

以下是重新梳理的前端UI编程基础知识体系&#xff0c;结合最新技术趋势与实战要点&#xff0c;以更适合快速掌握的逻辑结构呈现&#xff1a; 一、基础三要素&#xff08;结构→表现→行为&#xff09; 1. HTML5 核心能力 • 语义化标签&#xff1a;<header>, <nav&g…