# apiPermission **Repository Path**: sunlei99/apiPermission ## Basic Information - **Project Name**: apiPermission - **Description**: URL验签工具,防止内容在传输过程中被篡改和地址泄漏后发生的恶意性攻击,技术上通过filter对关键参数进行容器外校验,屏蔽无效请求的继续渗透。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-04-03 - **Last Updated**: 2021-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ApiPermission 简介 URL验签工具,防止内容在传输过程中被篡改和地址泄漏后发生的恶意性攻击,技术上通过filter对关键参数进行容器外校验,屏蔽无效请求的继续渗透。 校验参数通过header传输,内容参数通过body以json数据格式传输。 ### 1、默认必须header参数:        
header参数说明:
参数说明是否必须备注
appid使用者标示必须常量值:项目初,使用者从提供服务方获取。
Content-Type数据格式必须目前仅支持‘application/json’格式数据
timestamp时间戳非必须默认5分钟,超出则请求超时。
sign参数签名必须签名规则:
1、接口参数按key首字母升序排列;
2、md5采取32位小写两次加密;
3、signKey 常量值:项目初,使用者从提供服务方获取。;
4、加密规则md5[md5(key1=value1&key2=value2&signKey)+nonce]。备注只处理第一层如遇到数组或嵌套{} key与value不参与运算。
nonce随机数必须必须
### 2、状态码 SUCCESS("200", "success"), UNKNOW_ERROR("50001","未知错误"), PARAMETER_ERROR("40001","参数错误"), TOKEN_EXPIRE("40002","认证过期"), REQUEST_TIMEOUT("40003","请求超时"), SIGN_ERROR("40004","sign签名错误"), REPEAT_SUBMIT("40005","请不要频繁操作"), CONTENT_TYPE("40006","Content-Type仅支持application/json格式数据"), DATA_FORMAT("40007","data数据格式不支持"), TIMESTAMP_TIMEOUT("40008","TIMESTAMP超时"), INPUT_ERROR("40009","录入错误"), VALIDATE_ERROR("40010","数据验证错误"), NODATE_UPDATE("30001","没有数据更新"); ### 3、项目整合方法 #### springBoot工程 /** * API sign验签 */ @Configuration public class ApiPermissionConfig { @Bean("apiAuthFilter") public FilterRegistrationBean filterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new ApiAuthFilter()); registration.addUrlPatterns("/api/*"); registration.addInitParameter("signKey", "***2019"); registration.setName("apiAuthFilter"); registration.setOrder(1); return registration; } } 初始化参数: excludedPaths 可以定义不做校验的url,多个值可用“,”分隔; signKey 加密常量 authHeaderParams 可通过常量池自定义过滤参数范围,多个值可用“,”分隔,不定义则执行默认过滤范围。