保护url时效性和安全性的一种解决方案
几乎都是同事小哥哥帮我铺路,给我参考链接,实现的理论方法以及知识,我只剩下看资料,敲代码,出错了也是他帮我看着一步步解释搞定过来的。嗯,大好人一枚。
ok,思路:
是生成一个随机数放在url里面,当做参数传递,在业务请求controller那里检验这个nonce是否与缓存里的一致,并且添加一个时间戳的属性,这样可以设置一段时间内url有效,过段时间点击就出现链接失效的情况。
开始咯:
1:使用了SecureRandom生成随机数nonce
import java.security.SecureRandom;
String nonce = null;
SecureRandom random = null;
try {
random = SecureRandom.getInstance("SHA1PRNG");
System.out.println("SecureRandom random init:" + random);
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] values = new byte[20];
random.nextBytes(values);
nonce = String.valueOf(random.nextLong());
2 : 自定义一个class ,来构建一个对象,对象里面存放时间戳,nonce,openid.生成之后,把它放到一个cache里面,这个Guava Cache 存放。
假如只是简单的把Guava Cache当作HashMap或ConcurrentHashMap的替代品,不需要用到load方法,而是手动地插入,可以这样:
Java代码
public static final Cache<String, Object> cache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build();
注意不能用LoadingCache了。
查找:
cache.getIfPresent("xx");
插入:
cache.put("xx", "xxx");
3 : 获取缓存里面的数据去对比检验就好了
private Boolean checkTimeOut(String openid,String nonce){
Boolean flag = false;
if(!nonce.isEmpty()){
StructureOfNonce v = (StructureOfNonce) MenuClickEventHandler.cache.getIfPresent(nonce);
String cnonce = v.getNonce();
String copenid = v.getOpenid();
long createTimestamp = v.getTimestamp();
if(openid.equalsIgnoreCase(copenid) && nonce.equalsIgnoreCase(cnonce)){
Long currentTime = System.currentTimeMillis();
int time =(int) (currentTime - createTimestamp)/1000/60 ;
if(0 <= time && time <= 1){
flag = true;
}
}
}
return flag;
}
Cheers !
好的,全是别人的经验,下面放巨人的果实吧!
详细解析cacheGuava Cache :
http://bylijinnan.iteye.com/blog/2225074
保护url时效性和安全性的一种解决方案的更多相关文章
- WebService安全性的几种实现方法【身份识别】
转:http://blog.csdn.net/yongping8204/article/details/8619577 WebService安全性的几种实现方法[身份识别] 标签: webservi ...
- [转]ArcGIS移动客户端离线地图的几种解决方案
原文地址:http://blog.chinaunix.net/uid-10914615-id-3023158.html 移动GIS中,通常将数据分为两大类:basemap layer和operatio ...
- JS控制div跳转到指定的位置的几种解决方案总结
原文:http://www.jb51.net/article/96574.htm 这篇文章主要介绍了JS控制div跳转到指定的位置的几种解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考 ...
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- PHP中实现MySQL嵌套事务的两种解决方案
PHP中实现MySQL嵌套事务的两种解决方案 一.问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: Transactions cannot be nested. This is a co ...
- zepto的tap事件的点透问题的几种解决方案
你可能碰到过在页面上创建一个弹出层,弹出层有个关闭的按钮,你点了这个按钮关闭弹出层后,这个按钮正下方的内容也会执行点击事件(或打开链接).这个被定义为这是一个“点透”现象. 以前,我也听到过tap的点 ...
- Mybatis多参传递的四种解决方案
Mybatis多参传递的四种解决方案 代码异常:org.apache.ibatis.binding.BindingException: Parameter 'param' not found. 长时间 ...
- javascript文件夹选择框的两种解决方案
javascript文件夹选择框的两种解决方案 解决方案1:调用windows 的shell,但会有安全问题. * browseFolder.js * 该文件定义了BrowseFolder()函数,它 ...
- bugfree如何修改Bug7种解决方案的标注方法
Bug有7种解决方案的标注方法 By Design- 就是这么设计的,无效的Bug Duplicate - 这个问题别人已经发现了,重复的Bug External - 是个外部因素(比如浏览器.操作系 ...
随机推荐
- js中循环对比(for循环,foreach,for in,for of ,map)
对空位的处理 for循环(不会忽略空位,标记undefined) var arr =[1,2,undefined,3,null,,7] for (let i=0;i<arr.length;i++ ...
- echart 饼状图自定义样式
echarts.init(document.getElementById('WaterCategoryStatistics')).setOption({ legend: { orient:'verti ...
- hihocoder 1496 寻找最大值
题解: 注意到$ai$只有$1e6$这件事情肯定要枚举和这个有关的东西 考虑枚举$ai\&aj$的值就可以了 那么这个集合一定是ai,aj的子集 于是我们对每个集合从大到小枚举丢掉一位转移就行 ...
- 多线程下载图片,同步下载http://www.importnew.com/15731.html
package mutiDownload; import java.io.IOException; import java.io.InputStream; import java.io.RandomA ...
- 利用NSE脚本检测域传送和证书透明度滥用
nslookup -type=NS <domain> <server> nmap -p 53 --script dns-zone-transfer --script-args ...
- SpringBoot启动tomcat源码解读
一.SpringBoot自动拉起Tomcat 原文链接:http://www.studyshare.cn/blog-front/blog/details/1136 SpringBoot框架是当前比较流 ...
- C# 接口属性的定义&get、set访问器的简单应用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口 ...
- react和redux版本不匹配
1.页面报错Cannot read property 'shape' of undefined 2. 原因为:react版本与react-redux版本不匹配. 1.package.json文件修改该 ...
- ISP PIPLINE (六) AWB
What is WB(white balance)? 人的视觉和神经系统在看到白色物体的时候,基本不受环境的变化而出现严重的错觉.比如阴天,晴天,室内,室外,日光灯,白炽灯等的环境下,人依然会将白纸视 ...
- VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时
之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...