JAVA 中 HTTP 基本认证(Basic Authentication)

news2024/11/20 11:30:23

目录

  • 服务端这么做
    • 服务端告知客户端使用 Basic Authentication 方式进行认证
    • 服务端接收并处理客户端按照 Basic Authentication 方式发送的数据
  • 客户端这么做
    • 如果客户端是浏览器
    • 如果客户端是 RestTemplat
    • 如果客户端是 HttpClient
  • 其它
  • 参考

服务端这么做

  1. 服务端告知客户端使用 Basic Authentication 方式进行认证
  2. 服务端接收并处理客户端按照 Basic Authentication 方式发送的数据

服务端告知客户端使用 Basic Authentication 方式进行认证

  • 服务端返回 401(Unauthozied)状态码给客户端
  • 服务端在Response 的 header “WWW-Authenticate” 中添加信息

在这里插入图片描述

服务端接收并处理客户端按照 Basic Authentication 方式发送的数据

private boolean checkBasicAuthorization(HttpServletRequest request) {
	String rawStringAuthorization = request.getHeader("Authorization");
	Assert.isTrue(StringUtils.startsWith(rawStringAuthorization, "Basic"), "Basic 认证失败");
	String base64StringAuthorization = StringUtils.replaceOnce(rawStringAuthorization, "Basic", "");
	base64StringAuthorization = StringUtils.trim(base64StringAuthorization);
	
	byte[] bytesAuthorization = Base64Utils.decodeFromString(base64StringAuthorization);
	String stringAuthorization = new String(bytesAuthorization);
	
	String[] arrUserAndPass = StringUtils.split(stringAuthorization, ":");
	Assert.isTrue(2==arrUserAndPass.length, "Basic 认证失败");
	
	String username = arrUserAndPass[0];
	String password = arrUserAndPass[1];
	
	if (StringUtils.equals(username, "myuser") && StringUtils.equals(password, "mypassword")) {
		return true;
	}
	
	return false;
}
  • org.apache.commons.lang3.StringUtils
  • org.springframework.util.Base64Utils

客户端这么做

客户端按照 Basic Authentication 方式向服务端发送数据

如果客户端是浏览器

浏览器支持 Basic Authentication 方式认证。浏览器会自动弹出提示窗体,并自动向该地址发送认证请求。

浏览器自动弹出的对话框:
在这里插入图片描述
点击“登录”后,浏览器自动向该地址发送请求:
在这里插入图片描述

  • 输入用户名:myuser,密码:mypassword
  • “bXl1c2VyOm15cGFzc3dvcmQ=” = base64("myuser:mypassword")

如果客户端是 RestTemplat

@Configuration
public class RestTemplateConfig {
	@Bean
	public RestTemplate restTemplate() {
		RestTemplate restTemplate = new RestTemplate();
		restTemplate.getInterceptors()
			.add(new BasicAuthenticationInterceptor("myuser","mypassword")); 
;
		
		return restTemplate;
	}
}

如果客户端是 HttpClient

其它

Basic Authentication 方式的认证,通常不需要登录页面,只需要登录Action即可。
在这里插入图片描述

参考

https://developer.atlassian.com/server/jira/platform/basic-authentication/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.go环境配置与开发工具选择

go 环境配置 下载安装包 官网(https://go.dev/dl/) 下载地址(国内)(https://golang.google.cn/dl/) 根据自己的操作系统选择下载即可 下载后安装 记住地址 比如: D:\work\devtool\go 配置系统环境变量 PATH 指向 go 的安装 bin 目录 比如: D:\work…

如何将Docker容器打包并在其他服务器上运行

如何将Docker容器打包并在其他服务器上运行 我会幻想很多次我们的相遇,你穿着合身的T恤,一个素色的外套,搭配一条蓝色的牛仔裤,干净的像那天空中的云朵,而我,还是一个的傻傻的少年,我们相识而笑…

代码随想录-Day17

110. 平衡二叉树 这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 111,则二叉树是平衡二叉树。根据定义,一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树,因此可以使用递…

WPF水流动画(使用转换器模拟逻辑门控制水流信号)

前言 在使用WPF绘制流程图并模拟水流动画时,往往既需要控制阀泵的开合,又要控制动画启停。倘若能够将阀泵的开合与动画播放建立逻辑关系,这样就能够让业务代码“专心”地去控制阀泵开关,而不需要处理界面的展示。 动画示例 说明…

2024-5-4-从0到1手写配置中心Config之基于h2的config-server

添加依赖 新建的web工程中添加h2的依赖 添加h2的配置 设置数据源和密码设置初始化sql语句打开h2的控制台 初始化语句创建一个config表,保存服务配置信息。 完成CRUD接口 controller类 mapper接口 测试 在web控制台可以看到sql已经初始化完成,crud接口…

Postman进阶功能-Mock服务与监控

大家好,前面跟大家分享一些关于 Postman 的进阶功能,当我们深入探索 Postman 的进阶功能时,Mock 服务与监控这两个重要方面便跃然眼前。 首先,Mock 服务为我们提供了一种灵活便捷的方式,让我们在某些实际接口尚未准备好…

Transformer系列专题(二)——multi-headed多头注意力机制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是multi-headed(多头注意力机制)二、multi-headed三、multi-headed结果四、堆叠多层总结 前言 在实践中,当给定相同…

四川古力科技抖音小店,创新科技点亮购物新体验

在这个数字化浪潮汹涌的时代,四川古力科技以其前瞻性的战略眼光和创新能力,闪耀于抖音小店这片电商新蓝海,开启了未来购物的新纪元。作为一家集技术研发、产品创新、市场营销于一体的科技型企业,古力科技不仅为消费者带来了前所未…

Android Studio 与 Gradle 及插件版本兼容性

Android Studio 开始新项目时,会自动创建其中部分文件,并为其填充合理的默认值。 项目文件结构布局: 一、Android Gradle 及插件作用: Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件 (AGP) 添加…

游戏行业 2024 Q1报告 | 国内同比上升7.6%,海外收入同比环比双增长,码住!

作为中国音像与数字出版协会主管的中国游戏产业研究院的战略合作伙伴,伽马数据发布了《2024年1—3月中国游戏产业季度报告》。 数据显示, 2024年1—3月,中国游戏市场实际销售收入726.38亿元,同比增长7.60%,主要受移动游…

WXML模板语法-数据绑定

1.数据绑定的基本原则 (1)在data中定义数据 (2)在WXML中使用数据 2.在data页面中定义数据:在页面对应的.js文件中,把数据定义在data对象中即可 (这里打错了 应该是数组类型的数据... 报意思啊) 3.Mustache语法的格式 把data中的…

Element Plus/vue3 无限级导航实现

在使用element plus 时,最初要使用的就是导航组件了,官网上看到的也就是写死的一级/二级导航,那么如何设计一个无限级且动态的导航呢?毋庸置疑,递归。废话不多说,直接看代码和效果: 代码&#x…

单链表oj

练习 1. 删除val节点 oj链接 这道题最先想出来的方法肯定是在遍历链表的同时删除等于val的节点,我们用第二中思路:不等于val的节点尾插,让后返回新节点。代码如下: struct ListNode* removeElements(struct ListNode* head, int val) {str…

设置height:100%不生效的原因

之前网课案例总是不屑于去看,因为总觉得太花时间,但是不可否认的是,认真去看还是会有收获的,而且常有意外收获 昨天在看实现动画效果的综合案例中,意外解决了我长久以来的一个疑问:为什么给元素设置height…

MyBatis入门——MyBatis XML配置文件(3)

目录 一、配置连接字符串和MyBatis 二、写持久层代码 1、添加 mapper 接口 2、添加 USerInfoXmlMapper.xml 3、测试类代码 三、增删改查操作 1、增(Insert) 返回自增 id 2、删(Delete) 3、改(update&#xf…

【Linux】-Tomcat安装部署[12]

目录 简介 安装 安装部署JDK环境 解压并安装Tomcat 简介 Tomcat是由Apache开发的一个Servlet容器,实现了对Servlet和JSP的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说&#…

嵌入式学习——3——IO分类模型

1、阻塞IO和非阻塞IO 1.1 阻塞IO - 在阻塞IO模型中,当一个IO操作(如读取或写入)开始时,如果数据没有准备好,程序会被挂起(即阻塞),直到数据准备好并且IO操作完成。 - 在数据准备阶段…

sql server【 特定分隔符隔开的字符串转表】和【 列转逗号隔开的字符串】

文章目录 引言I 特定分隔符隔开的字符串转表II Sql Server 列转逗号隔开的字符串2.1 多列转行,逗号分隔(字段拼接/字段分割)2.1 案例引言 Sql Server 列转逗号隔开的字符串 和 逆转,常用于数据导出和数据查询。 I 特定分隔符隔开的字符串转表 CREATE FUNCTION [dbo].[GetIDLi…

LitCTF

[LitCTF 2023]enbase64 base 64 里面有一个换表的函数 写代码 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() {char *result; char Destination[65]; int v3[65];int j;int i; char Source[]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcde…

【配置】雷池WAF社区版安装

官方文档点击跳转 什么是雷池 雷池&#xff08;SafeLine&#xff09;是长亭科技耗时近 10 年倾情打造的 WAF&#xff0c;核心检测能力由智能语义分析算法驱动。 什么是 WAF WAF 是 Web Application Firewall 的缩写&#xff0c;也被称为 Web 应用防火墙。 区别于传统防火墙…