Tomcat内部是如何处理来完成BASIC应用认证的
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,今天小编给大家分享一下Tomcat内部是如何处理来完成BASIC应用认证的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后
千家信息网最后更新 2025年12月04日Tomcat内部是如何处理来完成BASIC应用认证的
今天小编给大家分享一下Tomcat内部是如何处理来完成BASIC应用认证的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1. Authorization 请求头
在此之前,我们先来了解下请求头中的Authorization的具体作用,以下为RFC2616中对于authorization的定义:
A user agent that wishes to authenticate itself with a server--
usually, but not necessarily, after receiving a 401 response--
does so by including an Authorization request-header field with the
request. T
Authorization = "Authorization" ":" credentials
即在收到服务器返回401信息之后,用于向服务器传递认证的信息。
2. BASIC认证
对于HTTP的安全认证方式,有以下几种实现形式:
BASIC
FORM
DIGEST
SSL
在输入用户名和密码之后,实际上传到Tomcat的是这样一个内容:
Basic dG9tY2F0OnRvbWNhdA==
这个字符串,空格前是当前认证使用的方式,空格后是用户名和密码的Base64编码,写到这里,大家应该会哦的一声,后台直接不就是Base64解码嘛。你说的对。是这样的
解码的代码如下:位于BasicAuthorization.authenticate()
// Validate any credentials already included with this request
MessageBytes authorization =
request.getCoyoteRequest().getMimeHeaders()
.getValue("authorization"); //解析出请求头中的认证值
if (authorization != null) {
authorization.toBytes();
ByteChunk authorizationBC = authorization.getByteChunk();
BasicCredentials credentials = null;
try {
credentials = new BasicCredentials(authorizationBC); //具体解析用户名和密码的地方
String username = credentials.getUsername();
String password = credentials.getPassword();
//根据获得的数据进Realm认证
principal = context.getRealm().authenticate(username, password);
if (principal != null) {
register(request, response, principal,
HttpServletRequest.BASIC_AUTH, username, password);
return (true);
}
}
catch (IllegalArgumentException iae) {
if (log.isDebugEnabled()) {
log.debug("Invalid Authorization" + iae.getMessage());
}
}
}BasicCredentials构造函数:
/**
* Parse the HTTP Authorization header for BASIC authentication
* as per RFC 2617 section 2, and the Base64 encoded credentials
* as per RFC 2045 section 6.8.
*
* @param input The header value to parse in-place
*
* @throws IllegalArgumentException If the header does not conform
* to RFC 2617
*/
public BasicCredentials(ByteChunk input)
throws IllegalArgumentException {
authorization = input;
initialOffset = input.getOffset();
parseMethod();
byte[] decoded = parseBase64();
parseCredentials(decoded);//这里提取}
这就是Basic的Authorization请求头提取过程。PostMan做的就是在请求前先把用户名和密码的信息添加到请求头中。
如果你看完本文会打开代码尝试一下的话,Tomcat的Manager应用就是个样例。其也是通过BASIC完成认证的。
3. 应用
我们一般的应用如何配置还使用BASIC认证呢?
需要做的就是在web.xml中声明如下片段
BASIC
Tomcat Manager Application
此时即为应用使用BASIC认证了。但如果这个时候你急忙去试的话,一定是不起作用的。因为你没说明哪些资源要保护啊!
还需要单独声明哪些资源保护,例如下面的配置片段
上面声明具体的受保护的请求路径,对应使用的角色等。配置的更多内容可以参考Manager应用,我们不再多谈。
4. 为什么
我们上面提到HTTP的认证方式有许多种,Tomcat也都有对应的实现。
那在web.xml中配置了BASIC之后,是怎么和具体BASIC认证的代码对应起来的呢?
实际上实现原理是这个样子的:
上面列表中所示的这些认证方式,对应到Tomcat中,是以一个Valve的形式实现。这个具体每个应用添加哪个对应认证方式的Valve,就是通过解析web.xml中配置的auth-method,判断具体方式来实现的。
以上就是"Tomcat内部是如何处理来完成BASIC应用认证的"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
认证
应用
就是
方式
配置
内容
密码
用户
用户名
知识
篇文章
代码
信息
保护
作用
实际
实际上
形式
更多
服务器
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全有什么专业
笑傲江湖ol服务器之间打架
网络安全手知识4条
在券商里面做软件开发
如何创建单机数据库
服务器性能测算
软件开发的语言是什么
计算机网络技术基本信息
csgo重连一直卡在连接服务器
网络安全技术与硬件
依米康有网络安全概念吗
772啊数据库的确
上海条码打印机软件开发班
软件测试笔试题数据库查询
网络安全法有关部门对举报人
北京中超伟业软件开发
软件开发行业企业排行
一找网络技术有限公司
郑州网络安全周签约
bak微信文件怎么还原到数据库
无线网络技术 应用
虚拟服务器磁盘空间分配方式
网络安全三个基本面
基因数据库新闻
青岛网络安全产业项目
浅析网络应用服务器论文
用友网络安全手抄报
服务器安全狗v3.5
计算机软件开发的行业代码
校园网络安全书籍