Java实现二维码技术探讨。
- - CSDN博客研发管理推荐文章Java生成二维码方法有三种:. 1: 使用SwetakeQRCode在Java项目中生成二维码 . http://swetake.com/qr/ 下载地址 . 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip . 这个是日本人写的,生成的是我们常见的方形的二维码 .
问题:
最近工作中遇到一个签到的问题,其实说来这并不是一个高并发的问题,也并不是CSRF伪造请求的问题,但是跟这两点有点类似,总结来说是针对用户防止短时间内重复刷请求的问题啦,根本原因其实是单用户的并发问题,那么如何实现呢?
解答:
思路一,CSRF问题我们怎么解决呢,一般是用时间戳,Appkey,AppSecret来生成token,过了预定的时间这个请求就不能用了。如果这种策略用在解决这个问题上肯定是行不通的,因为一般的时间戳过期时间肯定是以分钟为单位的,而签到一般是秒级单位的,一秒内可以生成多次签到请求。
思路二,搞一个ConcurrentHashMap,来控制用户的访问。
Object signObj = concurrentHashMap.get("username"); if(null == signObj) { signObj = concurrentHashMap.putIfAbsent("username", new Object()); if(null != signObj) { doSign(); concurrentHashMap.remove("username"); } }
思路三,目前的实现是Cache来实现的,思路其实差不多,可能cache会快一点点和设置超时时间吧。
//防止重复处理, 如果有数据返回false //即使失败了,一分钟内也不能再重试请求了 boolean succ = setCacheDataIfNotExist(accountId + "-" + sourceType, accountId + "|" + sourceType, 60 * 1000); if(!succ){ LogConstant.runLog.info("User sign repeatly! accountId : " + accountId + " ip : " + ip + " sourceType: " + sourceType); return -1; } dosign();