# http-signature
**Repository Path**: 98sun/http-signature
## Basic Information
- **Project Name**: http-signature
- **Description**: http接口签名工具,支持零代码签名配置。搜索关键字:java签名,接口签名工具,零代码签名,http客户端拦截器签名,请求拦截签名
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2023-07-12
- **Last Updated**: 2023-07-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# http-signature
http-signature是一款http客户端签名工具,该工具可以使开发者不用在调用第三方接口时编写签名代码,仅仅需要在yaml或者properties配置文件中配置url和对应的签名规则即可。
http-signature支持spring-mvc的url拦截语法,支持为单个精确url或者模糊匹配url配置签名规则,也支持url group;支持将config提取抽象,将一个config重复使用。
## 1、支持哪些http客户端
| artifactId | groupId | 是否支持 |
|:----:| :-----: |:----:|
| httpclient | org.apache.httpcomponents | 暂不支持 |
| okhttp | com.squareup.okhttp3 | 支持 |
| restTemplate | org.springframework | 暂不支持 |
| feign | com.netflix.feign | 暂不支持 |
| open feign | org.springframework.cloud | 暂不支持 |
以okhttp为例,展示如何在项目中使用http-signature。
使用http-signature的基本功能,比如在springboot配置文件中配置签名规则,导入如下依赖
```xml
org.needcoke
http-signature-boot-starter
1.0.1
```
如需配合数据库使用,可以使用如下依赖
```xml
mysql
mysql-connector-java
8.0.29
com.baomidou
mybatis-plus-boot-starter
3.4.2
org.needcoke
http-signature-mybatis-plus-adapter
1.0.1
```
创建配置类,其关键就是将http-signature为okHttp提供的拦截器add到OkHttpClient中。
```java
import okhttp3.OkHttpClient;
import org.needcoke.hs.okhttp.OkHttpInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
@Configuration(proxyBeanMethods = false)
public class HttpSignatureConfiguration {
@Resource
private OkHttpInterceptor okHttpInterceptor;
@Bean
public OkHttpClient okHttpClient() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(okHttpInterceptor);
OkHttpClient client = builder.build();
return client;
}
}
```
## 2、支持哪些配置
## 3、配置中的一些枚举量
## 4、配置的默认值
## 4、为某一个具体的url配置签名规则
举例: 想要为所有 /api/user/为前缀的url配置指定的签名规则 , 具体指定 param-connector为# kv_connector为@,其他属性采用默认值。
则可以在配置文件中写下如下配置,以yaml语法为例:
```yml
hs:
sender:
interceptor:
single-url:
- url: /api/user/*
connector-between-body-and-param: '#'
connector-between-name-and-value: '@'
sorted-function: default
#sorted-function: 'org.needcoke.hs.signature.DefaultSortedFunction' 允许外部自定义类,使用全类名
```
或者我们可以提取出一个配置,然后让这个 url 使用这个配置,如下
```yml
hs:
sender:
interceptor:
single-url:
- url: /api/user/*
use-config-name: aConfig
config:
- name: aConfig
connector-between-body-and-param: '&'
connector-between-name-and-value: '='
```
## 5、为多个url配置签名规则
最简单的就是配置多个url,使用同一个规则
```yml
hs:
sender:
interceptor:
single-url:
- url: /api/user/*
use-config-name: aConfig
- url: /api/hi/*
use-config-name: aConfig
config:
- name: aConfig
connector-between-body-and-param: '&'
connector-between-name-and-value: '='
```
但是这种写法在url过多的情况下将非常麻烦,所以我们提供了url group 概念
```yml
hs:
sender:
interceptor:
url-group:
- name: groupA
urlPattern:
- /api/user/*
- /api/hi/*
use-config-name: aConfig
- name: groupB
urlPattern:
- /r/f/t/*
- /w/q/a/*
use-config-name: bConfig
config:
- name: aConfig
connector-between-body-and-param: '&'
connector-between-name-and-value: '='
- name: bConfig
connector-between-body-and-param: ';'
connector-between-name-and-value: '='
```
## 6、示例目录
[1、示例1](./example/example1.md '示例1')