几乎都是同事小哥哥帮我铺路,给我参考链接,实现的理论方法以及知识,我只剩下看资料,敲代码,出错了也是他帮我看着一步步解释搞定过来的。嗯,大好人一枚。

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时效性和安全性的一种解决方案的更多相关文章

  1. WebService安全性的几种实现方法【身份识别】

     转:http://blog.csdn.net/yongping8204/article/details/8619577 WebService安全性的几种实现方法[身份识别] 标签: webservi ...

  2. [转]ArcGIS移动客户端离线地图的几种解决方案

    原文地址:http://blog.chinaunix.net/uid-10914615-id-3023158.html 移动GIS中,通常将数据分为两大类:basemap layer和operatio ...

  3. JS控制div跳转到指定的位置的几种解决方案总结

    原文:http://www.jb51.net/article/96574.htm 这篇文章主要介绍了JS控制div跳转到指定的位置的几种解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考 ...

  4. 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 重点: 实现多级子目录的压缩, ...

  5. PHP中实现MySQL嵌套事务的两种解决方案

    PHP中实现MySQL嵌套事务的两种解决方案 一.问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: Transactions cannot be nested. This is a co ...

  6. zepto的tap事件的点透问题的几种解决方案

    你可能碰到过在页面上创建一个弹出层,弹出层有个关闭的按钮,你点了这个按钮关闭弹出层后,这个按钮正下方的内容也会执行点击事件(或打开链接).这个被定义为这是一个“点透”现象. 以前,我也听到过tap的点 ...

  7. Mybatis多参传递的四种解决方案

    Mybatis多参传递的四种解决方案 代码异常:org.apache.ibatis.binding.BindingException: Parameter 'param' not found. 长时间 ...

  8. javascript文件夹选择框的两种解决方案

    javascript文件夹选择框的两种解决方案 解决方案1:调用windows 的shell,但会有安全问题. * browseFolder.js * 该文件定义了BrowseFolder()函数,它 ...

  9. bugfree如何修改Bug7种解决方案的标注方法

    Bug有7种解决方案的标注方法 By Design- 就是这么设计的,无效的Bug Duplicate - 这个问题别人已经发现了,重复的Bug External - 是个外部因素(比如浏览器.操作系 ...

随机推荐

  1. 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++ ...

  2. echart 饼状图自定义样式

    echarts.init(document.getElementById('WaterCategoryStatistics')).setOption({ legend: { orient:'verti ...

  3. hihocoder 1496 寻找最大值

    题解: 注意到$ai$只有$1e6$这件事情肯定要枚举和这个有关的东西 考虑枚举$ai\&aj$的值就可以了 那么这个集合一定是ai,aj的子集 于是我们对每个集合从大到小枚举丢掉一位转移就行 ...

  4. 多线程下载图片,同步下载http://www.importnew.com/15731.html

    package mutiDownload; import java.io.IOException; import java.io.InputStream; import java.io.RandomA ...

  5. 利用NSE脚本检测域传送和证书透明度滥用

    nslookup -type=NS <domain> <server> nmap -p 53 --script dns-zone-transfer --script-args ...

  6. SpringBoot启动tomcat源码解读

    一.SpringBoot自动拉起Tomcat 原文链接:http://www.studyshare.cn/blog-front/blog/details/1136 SpringBoot框架是当前比较流 ...

  7. C# 接口属性的定义&get、set访问器的简单应用

    using System; using System.Collections.Generic; using System.Linq; using System.Text;   namespace 接口 ...

  8. react和redux版本不匹配

    1.页面报错Cannot read property 'shape' of undefined 2. 原因为:react版本与react-redux版本不匹配. 1.package.json文件修改该 ...

  9. ISP PIPLINE (六) AWB

    What is WB(white balance)? 人的视觉和神经系统在看到白色物体的时候,基本不受环境的变化而出现严重的错觉.比如阴天,晴天,室内,室外,日光灯,白炽灯等的环境下,人依然会将白纸视 ...

  10. VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时

    之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...