0%

Docker Compose

docker-compose是一个Docker容器的管理工具集,可以很方便的创建和重建容器、执行启动和停止容器等操作

docker-compose常用命令

查看版本

1
docker-compose --version

创建或重建、启动容器

1
docker-compose --up

删除停止运行的所有容器

1
docker-compose --rm

启动所有容器

1
docker-compose --start

停止所有容器

1
docker-compose --stop

列出运行的容器列表

1
docker-compose --ps
阅读全文 »

HTTP认证

在进行http访问时,需要确定使用者的身份,常用的认证方式有

  • BASIC认证(基本认证)
  • DISEST认证(摘要认证)
  • SSL客户端认证
  • FormBase认证(基于表单认证)

BASIC认证

BASIC认证是最基础的认证,可能会被窃取,安全性并不高

过程

  • 当请求的资源需要BASIC认证时,服务器会返回401,且带有WWW-Authenticate首部的响应,该字段包含了认证的方式BASIC和Request-URI安全域字符串(realm)

    示例

    1
    Basic realm="security" charset="UTF-8"
  • 客户端要通过认证的话,需要将用户名和密码使用冒号:拼接,然后经过Base64编码处理,将生成的字符串写入到首部Authorization中

    示例

    1
    Basic ZWxhc3RpYqd6cmVuZHl3b3==

DISEST认证

DISEST认证就比BASIC认证更保险一些

过程

  • 请求的资源需要认证时,服务器会返回401,且带有WWW-Authenticate首部的响应,该字段中包含了响应方式认证所需要的临时质询码nonce

    必须要包含有realm和nonce信息

    示例

    1
    WWW-Authenticate: Digest realm="no auth",nonce="rULh6M3A6O2N8jjzxr6vJg==",qop="auth"
  • 客户端要通过认证的话,首部Authorization中需要包含username、realm、nonce、uri和response的字段信息,其中realm和nonce是之前从服务器中接收到的,username是realm限定范围内可进行认证的用户名,uri是地址,response存放经过MD5加密后的密码字符串

SSL客户端认证

SSL客户端认证时借由HTTPS的客户端证书来完成认证的,通过客户端证书认证,服务器可确认访问是否自己登陆的客户端

过程

  • 客户端必须安装证书
  • 接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书
  • 客户端会把客户端证书信息以Client Certificate报文方式发送给服务器
  • 服务器验证证书通过后可领取证书内客户端的公开密钥,然后开始HTTPS加密通信

FormBase认证

基于表单的认证一般使用cookie来管理session,将客户端发送过来的用户id和密码与之前登录过的信息做匹配来进行认证

过程

  • 客户端把用户ID和密码等登录信息放入报文的实体部分发送给服务器
  • 服务器会发放用以识别用户的sessionID,把用户状态和sessionID绑定后记录在服务器,向客户端返回响应时,会在首部字段Set-Cookie内写入SessionID
  • 客户端接收到从服务器发来的SessionID后,会把cookie保存到本地,下次向服务器发送请求时,浏览器会自动发送cookie,所以sessionID就会发到服务器

工厂模式

工厂模式可以将创建对象的具体过程屏蔽起来,其优点就是解耦

根据抽象程序的不同分为三种

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

简单工厂模式

简单工厂模式是提供一个创建对象实例的功能,而无需关心具体实现,工厂类根据传入的参数,动态决定创建哪一个产品类(这些产品类继承于同一个父类或接口),是用来选择实现的,可以选择任意接口的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private final TransactionManager transactionManager;

public SimpleTransactionFactory(TransactionManager transactionManager) {
Assert.notNull(transactionManager, "TransactionManager must not be null");
this.transactionManager = transactionManager;
}


@Override
public Transaction createTransaction(String name, int timeout) throws NotSupportedException, SystemException {
if (timeout >= 0) {
this.transactionManager.setTransactionTimeout(timeout);
}
this.transactionManager.begin();
return new ManagedTransactionAdapter(this.transactionManager);
}
阅读全文 »

添加分词器

在索引跑了一段时间之后,提出了一个新的分词规则,需要在索引上加一个分词器,但是在添加的时候报错

1
Can't update non dynamic settings

不允许修改配置,需要先关闭索引,在添加分词器,在打开索引

关闭索引

1
POST my_index/_close

添加分词器

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":","
}
}
}
}
}

打开索引

1
POST my_index/_open