0%

HTTP 认证:四种核心方式的深度解析

在网络通信中,身份认证是保障资源安全的基础环节。HTTP 协议定义了多种认证机制,用于验证客户端的身份合法性。以下详细解析四种常用的 HTTP 认证方式,包括其流程、安全性及适用场景。

BASIC 认证(基本认证)

BASIC 认证是 HTTP 协议中最基础的认证方式,由 HTTP/1.0 定义,实现简单但安全性较低。

核心流程

  1. 请求触发认证:客户端请求需要权限的资源时,服务器返回401 Unauthorized响应,并在WWW-Authenticate首部中指定认证方式和安全域(realm):

    1
    2
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Basic realm="User Area", charset="UTF-8"
    • realm:描述受保护资源的范围(如 “管理员后台”“用户中心”),帮助用户识别认证场景。
  2. 客户端提交凭证:用户输入用户名和密码后,客户端将 “用户名:密码” 用冒号拼接(如admin:123456),再通过Base64 编码生成字符串,放入Authorization首部发送:

    1
    2
    GET /protected HTTP/1.1
    Authorization: Basic YWRtaW46MTIzNDU2 // Base64编码后的值
  3. 服务器验证:服务器解码Authorization首部,验证用户名和密码是否匹配,通过则返回资源(200 OK),否则继续返回401

安全性分析

  • 缺陷:Base64 编码仅为 “明文转换”(非加密),通过抓包可直接解码获取用户名和密码(例如用echo "YWRtaW46MTIzNDU2" | base64 -d即可还原)。
  • 改进:必须配合 HTTPS 使用,通过加密传输避免凭证泄露。

适用场景

  • 内部临时系统、低安全需求的测试环境(如打印机管理界面)。
  • 不适合互联网公开服务或包含敏感数据的场景。

DIGEST 认证(摘要认证)

DIGEST 认证是为解决 BASIC 认证的安全缺陷而设计的,由 HTTP/1.1 定义,通过哈希算法避免密码明文传输。

核心流程

  1. 服务器发送质询:客户端请求受保护资源时,服务器返回401 Unauthorized,并在WWW-Authenticate中包含认证参数:

阅读全文 »

工厂模式(Factory Pattern):对象创建的解耦艺术

工厂模式是创建型设计模式的核心,其核心思想是将对象的创建过程与使用过程分离,通过 “工厂” 统一管理对象创建,降低代码耦合度,提高扩展性。根据抽象程度和适用场景,工厂模式可分为三类:简单工厂模式工厂方法模式抽象工厂模式

简单工厂模式(Simple Factory Pattern)

核心思想

通过一个具体的工厂类,根据输入的参数动态决定创建哪种产品实例(所有产品继承自同一父类或接口)。即 “由工厂根据参数选择产品实现”。

结构组成

  • 产品接口 / 父类:定义所有产品的公共方法。
  • 具体产品:实现产品接口的具体类。
  • 工厂类:包含创建产品的逻辑,根据参数返回不同产品实例。

代码示例

以 “计算器工厂” 为例,根据操作符创建不同运算器:

阅读全文 »

Elasticsearch 动态添加分词器:解决非动态配置更新问题

在 Elasticsearch 中,索引的部分配置(如分词器、分片数)属于非动态配置,创建索引后无法直接修改,否则会报 Can't update non dynamic settings 错误。若需为运行中的索引添加新分词器,需通过 “关闭索引→修改配置→重新打开索引” 的流程实现。

操作步骤详解

关闭索引

关闭索引后,索引暂时不可读写,但数据不会丢失,此时可修改非动态配置:

1
POST my_index/_close  # 关闭名为my_index的索引

响应示例

1
2
3
{
"acknowledged": true
}

添加 / 修改分词器配置

通过 _settings API 为关闭的索引添加新分词器(如按逗号拆分的 comma_analyzer):

1
2
3
4
5
6
7
8
9
10
11
12
13
PUT my_index/_settings
{
"settings": {
"analysis": {
"analyzer": {
"comma_analyzer": { # 自定义分词器名称
"type": "pattern", # 基于正则模式的分词器
"pattern": "," # 按逗号拆分
}
}
}
}
}

配置说明

阅读全文 »

properties文件中文

idea中properties文件默认中文会转为ascii

1
#\u4E2D\u6587

这样注释的可读性太低了,可以设置一下

idea中properties中文

1
#中文