# 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')