请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

api-wrap: API签名验证工具,简单易用 https://github.com/slacrey/api-wrap ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

api-wrap

开源软件地址:

https://gitee.com/slacrey/api-wrap

开源软件介绍:

服务端安全签名验签

chang list

  • api-wrap-boot去除redis依赖

引入jar包

gradle

compile 'com.seelyn:api-wrap-boot:{version}'

maven

<dependency>    <groupId>com.seelyn</groupId>    <artifactId>api-wrap-boot</artifactId>    <version>{version}</version></dependency>

使用示例

  • 使用EnableApiWrap注解,开启API Wrap功能
@SpringBootApplication@EnableApiWrappublic class WrapWebApplication {    public static void main(String[] args) {        SpringApplication.run(WrapWebApplication.class, args);    }}
  • 在controller类方法或类上添加@ApiWrap注解, 注解也可以自定义处理类,只有使用了注解的类和方法才能接收签名验签请求
@ApiWrap@PostMapping(value = "/web")public WrapRequest<DefaultWrapData> web(@RequestBody WrapRequest<DefaultWrapData> request) {    return request;}
  • 自定义API签名验签处理类
@ApiWrap(value=CustomWrapHandler.class)CustomWrapHandler类需要实现WrapHandler接口
  • WrapRequest 是统一的API验证请求类,其中泛型 DefaultWrapData类需要继承WrapData类
public class WrapRequest<T extends WrapData> {    private String appKey;    private String signature;    private long timestamp;    private int nonce;    private T data;    //setter getter省略.... }
import com.seelyn.apiwrap.WrapData;import com.seelyn.apiwrap.annotation.SignIgnore;public class DefaultWrapData extends WrapData {    // SignIgnore 注解标识标识忽略属性用于签名    @SignIgnore    private String name;    private String url;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getUrl() {        return url;    }    public void setUrl(String url) {        this.url = url;    }}
  • 存储appKey和appSecret用于请求验证
@Autowareprivate WrapStore wrapStore;// 存储密钥wrapStore.putSecret(appKey, appSecret);
  • 配置文件
#===========api wrap===========# app密钥,若用户没有自定义,则使用此api.wrap.secret=testjjhdsa# 单位秒,请求时间和服务器时间不能超过300秒api.wrap.legal-time=300# 若没有redis配置,wrapStore为本地存储# 若配置了redis,则wrapStore为redis存储#===========api wrap redis=============spring.redis.host=localhostspring.redis.port=6379spring.redis.database=0
  • 若没有redis配置,wrapStore为本地存储
  • 若配置了redis,则wrapStore为redis存储

客户端辅助签名工具

引入工具包

gradle

compile 'com.seelyn:api-wrap-client:{version}'

maven

<dependency>    <groupId>com.seelyn</groupId>    <artifactId>api-wrap-client</artifactId>    <version>{version}</version></dependency>

使用说明

DefaultWrapData WrapData = new DefaultWrapData(); WrapClient wrapClient = WrapClient.create(appKey, appSecret);WrapRequest<DefaultWrapData> request = wrapClient.wrap(WrapData)// request 为带签名信息的对象

服务端扩展

扩展WrapStore

@Serviceclass CustomWrapStore extends RedisWrapStore {    }

这样继承RedisWrapStore类或者实现WrapStore接口,可自定义包裹存储接口。系统自动使用你自定义的WrapStore

扩展WrapHandler

自定义CustomWrapHandler

// 自定义WrapHandler, 使用@Component注入到spring中管理@Componentpublic class CustomWrapHandler implements WrapHandler {    @Override    public String getAppSecret(String appKey) {        return null;    }    @Override    public String getSignature(String appKey, WrapRequest<WrapData> request) {        return null;    }    @Override    public void isLegalTime(long timestamp) {    }    @Override    public void isReplayAttack(String appKey, long timestamp, int nonce, String signature) {    }}

使用CustomWrapHandler

// ApiWrap中指定CustomWrapHandler.class类,则系统会根据此类型从Spring中获取对应的实例    @ApiWrap(value = CustomWrapHandler.class)    @PostMapping(value = "/web")    public WrapRequest<DefaultWrapData> custom(@RequestBody WrapRequest<DefaultWrapData> request) {        return request;    }

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap