api-wrap 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
api-wrap 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
api-wrap 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
api-wrap 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
api-wrap 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache
开发语言
操作系统 跨平台
软件类型 开源软件
所属分类 管理和监控安全相关
开源组织
地区 国产
提 交 者 产奶的蜗牛
适用人群 未知
收录时间 2020-10-30

软件简介

服务端安全签名验签

引入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
@EnableApiWrap
public 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用于请求验证
@Autoware
private WrapStore wrapStore;

// 存储密钥
wrapStore.putSecret(appKey, appSecret);
  • 配置文件
#===========api wrap===========
# app密钥,若用户没有自定义,则使用此
api.wrap.secret=testjjhdsa
# 单位秒,请求时间和服务器时间不能超过300秒
api.wrap.legal-time=300
#===========api wrap redis=============
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/02/07 17:44

[Javascript] Wrap an API with a Proxy

Proxies allow you to use functions that haven't yet been defined on an object. This means that you can invoke a function then create that function if it works with your API. This lesson shows you how to create an API around a rest service so that you can name each get request as a function on the...

0
0
发表了博客
2013/02/27 22:05

wrap 属性

wrap 属性 通常情况下,当用户在输入文本区域中键入文本后,浏览器会将它们按照键入时的状态发送给服务器。只有用户按下 Enter 键的地方生成换行。 如果您希望启动自动换行功能(word wrapping),请将 wrap 属性设置为 virtual 或 physical。当用户键入的一行文本长于文本区的宽度时,浏览器会自动将多余的文字挪到下一...

0
0
发表了博客
2012/10/29 20:11

fill-parent与wrap-content

fill_parent意思是在当前位置上,出去其它的空间,将当前Viewgroup剩下的位置填充。 wrap_content的意思是适应按钮上显示的字符长度或高度或内容的长度或高度,一般用于设置控件文本的高度

0
0
2020/02/22 12:30

Flutter Widgets 之 Wrap

老 孟 一个 有态度 的程序员 Wrap可以为子控件进行水平或者垂直方向布局,且当空间用完时,Wrap会自动换行,也是常说的流式布局。 创建多个子控件做为Wrap的子控件,代码如下: Wrap( children: List.genera...

0
0
发表了博客
2016/10/23 09:21

facet_wrap(~rating)

ggplot(data=redwine,aes(y=sulphates,x=alcohol,color=quality))+ geom_point()+ scale_y_continuous(limits=c(0.3,1.4))+ scale_color_brewer() ggplot(data=redwine,aes(y=sulphates,x=alcohol,color=quality))+ geom_point()+ scale_y_continuous(limits=c(0.3,1.4))+ facet_wrap(~rating)+ scale_color_brewer()...

0
0
发表了博客
2018/12/12 09:53

_.wrap(value, [wrapper=identity])

116 _.wrap(value, [wrapper=identity]) 创建一个函数将value提供给wrapper函数作为它的第一个参数。 任何提供给_.wrap函数的额外的参数都被添加到wrapper函数参数的结尾。wrapper函数调用时的this被绑定到被创建出来的函数的this 参数 value (*): 需要局部应用的参数 [wrapper=identity] (Function): 被包裹处理的函数 ...

0
0
发表于大前端专区
2016/03/15 16:42

wxWidgets wrap wtl browser

首先我们必须了解wxWidgets框架有自己的消息处理体系,WTL也有自己的消息处理体系,现在我们是wxWidgets wrap wtl,主消息循环是wxwidgets的,我们可以通过一个线程启动wtl消息循环,我们看下atlapp.h里面CAppModule一个函数的代码就会了解: BOOL AddMessageLoop(CMessageLoop* pMsgLoop) { CStaticDataInitCriticalSec...

0
0
发表了博客
2011/11/13 12:11

fill_parent和wrap_content的区别(翻译)

Either attribute can be applied to View's (visual control) horizontal or vertical size. It's used to set a View or Layouts size based on either it's contents or the size of it's parent layout rather than explicitly specifying a dimension. 两个属性都用来适应视图的水平或垂直大小,一个以视图的内容或...

0
1
发表了博客
2015/09/15 17:33

ruby wrap c (一)

使用ruby调用c

0
0
发表了博客
2016/03/01 12:55

match_parent与wrap_content

~~~~

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
6 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部