Tomcat内部是如何处理来完成BASIC应用认证的
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,今天小编给大家分享一下Tomcat内部是如何处理来完成BASIC应用认证的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后
千家信息网最后更新 2025年01月24日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安全错误
数据库的锁怎样保障安全
orcl数据库的口令失效
何谓网络技术
汕头电商软件开发报价
服务器塔式机柜式
软件开发环境如何搭建
本地如何查看服务器上的组策略
酒店数据库安全管理现状
代办服务软件开发
郑州net软件开发正规平台
知网数据库收费
数据库打开索引
新吴区软件开发价格实惠
全局主题软件开发
dw一键链接数据库插件
暗影国度朵丹尼尔服务器情况
软件开发著名国
高温疲劳寿命分析软件开发
疆界互联网科技有限公司愿景
泸州银行数据库品牌
网络安全职业发展 知乎
易星软件登录云服务器不支持
无线网络的服务器地址
浦东新区运营网络技术价格
重庆好屋网络技术有限公司
传奇检测服务器
软件开发SE级别哪个高
开办网络安全专业的学校
服务器磁盘管理界面无法查看硬盘
大话西游手游服务器开区时间
渭南市网络安全应急指挥中心