spring security 5 (9)-httpBasic基本认证

2023-11-04

httpBasic是由http协议定义的最基础的认证方式。每次请求时,在请求头Authorization参数中附带用户/密码的base64编码,参考base64。这个方式并不安全,不适合在web项目中使用。但它是一些现代主流认证的基础,而且在spring security的oauth中,内部认证默认就是用的httpBasic。

httpBasic基本配置

注意,这里没有配formLogin,也就不会再有formLogin相关的默认url和配置。

	protected void configure(HttpSecurity http) throws Exception  {
		http
			.authorizeRequests()    
				.anyRequest().authenticated().and()    
			.httpBasic().and()	//httpBasic认证
			.csrf().disable();           
	}

启动项目,打开浏览器,这里以Chrome为例,先按F12开启调试窗口,请求http://localhost:8080/hello 被拦截

Basic Authorization

点击取消,在调试窗口中查看该请求的响应头,其中有个WWW-Authenticate: Basic realm="Realm"。

WWW-Authenticate:服务器告知浏览器代理认证工作。

Basic:认证类型为Basic。

realm="Realm":认证域名为Realm,这个后面再讲。

此时的响应码为401,根据401和以上响应头,浏览器会接管工作,它会弹出上面那个框要求输入用户名/密码,并将其拼接成“用户名:密码”格式,中间是一个冒号,再用base64编码成xxx,然后在请求头中附加Authorization:Basic xxx,发给后台认证。后台需要用base64解码xxx,再认证用户名/密码。

认证错误:浏览器会保持弹框。

认证成功:浏览器会缓存有效的base64编码,在之后的请求中,浏览器都会在请求头中添加有效编码。

用postman模拟请求

在postman中选择Authorization的Basic Auth类型,右边输入预置的用户名和密码,send发送请求,显示hellow world。

关于以上配置的实际作用,我们来看一下请求头Headers。

它其实是在请求头中生成了一个Authorization参数,value为Basic xxx,xxx就是postman自动生成的base64编码。

注销

因为Basic会把Authorization保存在浏览器,之后每次请求都会带上,一直到用户关闭浏览器才会销毁,也就是说你无法在服务端有效的注销。不过在请求注销时,前端可以手动在请求头配置一个错的Authorization,也能起到注销效果。

realm

realm="Realm":指认证域名为Realm。在未认证用户请求不同的接口时,后台根据给该接口分配的域,可以响应不同的realm名,并且用不同用户名/密码进行认证。所以用户每请求一个新Realm的url,都会弹框要求用新Realm的用户名/密码进行认证,就好比不同的角色登录只能请求属于该角色的url。httpBasic默认realm名为Realm,可以用以下方式配置。

.httpBasic().realmName("Realm")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring security 5 (9)-httpBasic基本认证 的相关文章

随机推荐

  • MySQL 深度分页性能急剧下降,该如何优化?

    1 背景 mysql使用select limit offset rows分页在深度分页的情况下 性能急剧下降 例如 select 的情况下直接 limit 600000 10 扫描的是约60万条数据 并且是需要回表60W次 也就是说 部分性
  • 《Effective C++》学习笔记——区分接口继承和实现继承

    派生类public继承自基类 其中函数均是接口继承 实现继承又分为缺省继承与强制继承 对应着虚函数与非虚函数 我们在做项目时 对于任何事物都要抱有先描述再组织的心态 因此 当描述事物为其构建框架尤其是存在继承 is a 关系时 一定要搞清楚
  • centos配置telnet

    安装telnet yum install xinetd y yum install telnet server y yum install telnet y 2 启动xinetd服务和telnet服务 systemctl start xin
  • Vue双向数据绑定指令——v-mode

    前面我讲了V bind指令 该指令只能实现数据的单向绑定 从M自动绑定到V 无法实现数据的双向绑定 不能将数据传回mv控制的m中 也就是不能将数据传回逻辑层 这样前端和逻辑层便不能进行数据交互 为解决此问题 v model指令应运而生 v
  • 用生成数据做好隐私保护|Betterdata

    近年来 数据隐私保护正成为人们高度关注的问题 而匿名性并不能够从根本上解决数据泄露的困扰 此时 合成数据集 的方式正在成为数据保护的有效方法 Betterdata Betterdata 是一款生成合成数据的工具 在不影响准确度和隐私安全的前
  • SAR动目标检测系列:【2】多通道动目标检测

    在SAR的动目标检测应用中 要到达更好的检测性能 必须依赖于多通道检测方案 前文讲了单通道MTI的方法 与单通道系统相比 多通道SAR系统增加了系统自由度 可以通过杂波抑制提高运动目标的图像信杂噪比 改善系统的最小可检测速度和定位能力 同时
  • 将DataFrame某列中的空值填充为0

    客户需求 将空值填充为0 数据存储情况如下 python代码如下 import pandas as pd 获取数据 df pd read excel test xlsx sheet name test print 查看数据 print df
  • 十大程序员最实用的技术社区网站

    今天给大家整理一份国内程序员最实用的开源社区网站清单 希望可以给大家带来一点帮助 第一名 CSDN 中国专业IT社区CSDN Chinese Software Developer Network 创立于1999年 致力于为中国软件开发者提供
  • 【C语言链表实现】学生成绩管理系统(功能全面,通俗易懂)

    学生成绩管理系统 1 问题描述 2 概要设计 2 1 系统主要执行逻辑 2 2 函数调用关系 3 函数实现 3 1 头文件 3 2 核心数据结构设计 3 3 密码登录 3 4 界面菜单 3 5 保存学生信息 3 6 读取学生信息 3 7 录
  • pydantic学习与使用-13.Field 定制字段使用别名alias

    前言 pydantic 里面json是一个内置属性 我想定义一个字段名称是json 这就会引起报错 Field name json shadows a BaseModel attribute use a different field na
  • C++的智能指针如何赋值

    随着C 语言的发展 出现了一个新的功能 那便是 智能指针 而智能指针如何赋值 我来在此探讨一下 目录 1 如何给新创建的智能指针赋值 2 将普通指针赋值给智能指针 3 智能指针赋值给智能指针 shared ptr互相之间赋值 unique
  • go : GoLand安装及环境配置

    前因后果 新学期新气象 开学的第一节课是zw老师的区块链技术与应用领域 congratulations 涉及编程实验 使用Go语言 需要安装GoLand软件进行下一步 Go语言下载地址 golang下载链接 进去之后选择对应的版本下载 这里
  • linux 开启审计功能及规则配置

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 查询审计功能 service auditd status 审计日志文件目录 var log a
  • 如何提高测试用例覆盖率?阿里测试工程师是这样说的

    我们将讨论测试覆盖率的相关问题 以及它如何帮助提高软件质量的 测试覆盖率概述 测试覆盖率被定义为一种测试技术指标 它表明我们的测试用例是否真正完全覆盖了应用程序代码中的各种可能以及在运行这些测试用例时执行了多少代码 如果有10个需求并创建了
  • VS2019搭建linux开发环境

    开发环境 VMware Workstation Lite 15 5 1 链接 https pan baidu com s 1njZ0OOoDZohyJ4CZgMU1AQ 提取码 je0e Ubuntu64 链接 https pan baid
  • JAVA WEB Resource interpreted as Stylesheet but transferred with MIME type text/html

    在本地tomcat上时 用Chrome访问都没问题 CSS能加载且有效果 系统正常 部署到端Tomcat时 Chrome访问时能加载CSS文件 但是没有样式效果 我的项目中加了过滤器 统一了返回的类型为text html 根据请求类型 设置
  • 中级深入--day18

    Selenium Selenium是一个Web的自动化测试工具 最初是为网站自动化测试而开发的 类型像我们玩游戏用的按键精灵 可以按指定的命令自动操作 不同是Selenium 可以直接运行在浏览器上 它支持所有主流的浏览器 包括Phanto
  • 创建脚手架(控制台命令行)

    创建脚手架 控制台命令行 commander文档 说明 命令行项目用来初始化项目的前置条件 简单使用const program require commander program version 0 0 1 v version 输出版本号
  • Nodejs实现通用的加密和哈希算法(MD5、SHA1、Hmac、AES、Diffie-Hellman、RSA),crypto模块详解

    crypto crypto模块的目的是为了提供通用的加密和哈希算法 hash 用纯JavaScript代码实现这些功能不是不可能 但速度会非常慢 Nodejs用C C 实现这些算法后 通过cypto这个模块暴露为JavaScript接口 这
  • spring security 5 (9)-httpBasic基本认证

    httpBasic是由http协议定义的最基础的认证方式 每次请求时 在请求头Authorization参数中附带用户 密码的base64编码 参考base64 这个方式并不安全 不适合在web项目中使用 但它是一些现代主流认证的基础 而且