代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
API接口设计:防参数篡改+防二次请求(防重放)
作者:
/ 发布于
2019/7/30
/
1000
public class APIAuth extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); String token = request.getHeader("token"); String timestamp = request.getHeader("timestamp"); String nonce = request.getHeader("nonce"); String sign = request.getHeader("sign"); //时间限制配置 int timeLimit = 60; ctx.setSendZuulResponse(false); //请求头参数非空验证 if (StringUtils.isEmpty(token) || StringUtils.isEmpty(timestamp) || StringUtils.isEmpty(nonce) || StringUtils.isEmpty(sign)) { ctx.setResponseBody(JSON.toJSONString(new Result("-1", "请求头参数不正确"))); return null; } //请求时间和现在时间对比验证,发起请求时间和服务器时间不能超过timeLimit秒 if (StringUtils.timeDiffSeconds(new Date(), timestamp) > timeLimit) { ctx.setResponseBody(JSON.toJSONString(new Result("-1", "请求发起时间超过服务器限制"))); return null; } //验证用户信息 UserInfo userInfo = UserInfoUtil.getInfoByToken(token); if (userInfo == null) { ctx.setResponseBody(JSON.toJSONString(new Result("-1", "错误的token信息"))); return null; } //验证相同noce的请求是否已经存在,存在表示为重复请求 if (NoceUtil.exsit(userInfo, nonce)) { ctx.setResponseBody(JSON.toJSONString(new Result("-1", "重复的请求"))); return null; } else { //如果noce没有在缓存中,则需要加入,并设置过期时间为timeLimit秒 NoceUtil.addNoce(userInfo, nonce, timeLimit); } //服务器生成签名与header中签名对比 String serverSign = SignUtil.getSign(userinfo, token, timestamp, nonce, request); if (!serverSign.equals(sign)) { ctx.setResponseBody(JSON.toJSONString(new Result("-1", "错误的签名信息"))); return null; } ctx.setSendZuulResponse(true); return null; } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3