token认证和并发编程案例

一.三方token认证接口设计规范

 

 

 

前言

  说明:在实际的业务中,跟第三方系统进行数据的交互与传递,为了保证数据在传输过程中的安全。除了https的协议之外,通过一套算法和规范来保证接口数据传输的安全性

目录

    1. token简介

    2. timestamp 简介

    3. sign 简介

    4. 防止重复提交

    5. 使用流程

    6. 示例代码

 

1. Token简介

      Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,防止泄露。本次项目是保存token和token相关数据,比如失效时间到jvm缓存中

      当一个请求过来后,服务器就去缓存服务器中查询这个Token是否存在,存在则调用接口,不存在返回接口错误,一般通过拦截器或者过滤器来实现

      Token分为两种:   

      API Token(接口令牌): 用于访问不需要用户登录的接口,如登录、注册、一些基本数据的获取等。 获取接口令牌需要拿appId、timestamp和sign来换,sign=加密(appid+timestamp+key)。本次浪潮云登录模式

      USER Token(用户令牌): 用于访问需要用户登录之后的接口,如:获取我的基本信息、保存、修改、删除等操作。获取用户令牌需要拿用户名和密码来换。统一身份登录模式

      关于Token的时效性:

      token可以是一次性的、也可以在一段时间范围内是有效的,具体使用哪种看业务需要。本次我们的需求是两个小时有效,一次性的一般用来作为防重操作

2. timestamp 简介

 

      timestamp: 时间戳,是客户端调用接口时对应的当前时间戳,时间戳用于防止DoS攻击。当黑客劫持了请求的url去DoS攻击,每次调用接口时接口都会判断服务器当前系统时间和接口中传的的timestamp的差值,如果这个差值超过某个设置的时间(假如5分钟),那么这个请求将被拦截掉,如果在设置的超时时间范围内,是不能阻止DoS攻击的。本次需求没有用到,因为业务方和租户系统可以系统时间不一致,计算可能会有误差

3. Sign 简介

      nonce:随机值,是客户端随机生成的值,作为参数传递过来,随机值的目的是增加sign签名的多变性。

4. 防止重复提交

      对于一些重要的操作需要防止客户端重复提交的(如非幂等性重要操作),具体办法是当请求第一次提交时将sign作为key保存到redis。当同一个请求第二次访问时会先检测redis是否存在该sign,如果存在则证明重复提交了,接口就不再继续调用了。sign类似于一次性的token

5. 使用流程

      接口调用方(业务方)向接口提供方(服务器)申请接口调用账号,申请成功后,接口提供方会给接口调用方一个appId和一个secret参数

      客户端携带参数appId、timestamp、sign去调用服务器端的API token,其中sign=加密(appId + timestamp+key)

      客户端拿着api_token 去访问不需要登录就能访问的接口

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

使用git如何下载github上的代码到本地

 
  1. cd 到本地目录,使用git init 命令初始化git

    git init
    
  2. 添加github远程代码仓库

    //命令:git remote add origin + 远程代码仓库地址
    
    eg:git remote add origin https://github.com/zhangdaiscott/jeecg-boot.git
    
  3. 下载远程仓库代码

    //命令:git clone + 远程代码仓库地址
    eg:git clone https://github.com/zhangdaiscott/jeecg-boot.git
    
  4. 拉取最新代码(不合并本地代码)

    eg:git fetch

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二.并发编程真实案例

  1.CountdowLatch,重写AQS

  2.sync  +wait+  notifyAll

  2.重写CompletableFuture实现并发编程

 

posted @ 2022-04-18 15:58  Jack.London  阅读(158)  评论(0编辑  收藏  举报