20170103
来源:互联网 发布:html个人简历模板源码 编辑:程序博客网 时间:2024/06/02 04:48
1、接口安全性的设计
接口安全性主要包括身份是否合法,请求参数是否被篡改,请求的唯一性
在项目中主要是这么做的,在参数中添加 sysdate= systime & key = 32位的MD5加密码,
比如sysdate='20170103'&key=3AAD608D64D645A631AD685F5481C14D;
sysdate 是系统时间,key是 sysdate+password(约定的秘钥) 然后加密的,接口访问时服务器端首先会把 参数sysdate和约定的秘钥加密,与接口中key进行比较,如果不相等,就返回非法请求。还有sysdate与服务器时间是否超过两分钟(这个时间是自己定的),超过两分钟,就返回时间超时,这样做主要是为了防止key被破解,一直访问接口有效。这样做有一个缺点是客户端的系统时间有可能不对。
安全性只是相对的,这样做已算是相对安全的,如果涉及到金钱等重要数据,使用https是最安全的,OAuth2.0协议。
2、定时任务
在做微信公众号,微信支付时,接口都需要access_token这个参数,微信对获取access_token 的接口有访问次数的限制,所以不能每次需要的时候都去取,还有有效期的限制,2个小时内有效,这就需要我们写一个定时任务每隔2小时内比如7000秒去取一次,放到静态变量里面,这样就不会有访问次数过多,时间超时等问题了。
java中定时任务一般有三种方法:1,java.util.Timer类,2,启动一个线程,在线程的run()方法中写一个死循环,然后使用Thread.sleep()来保证线程定时执行某项任务。3采用开源的任务调度框架quartz,Spring框架也支持quartz。
1,Timer类如下
import java.util.Timer;public class Test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubTimer timer =new Timer();timer.schedule(new MyTask(), 1000,3000);//毫秒,1秒后启动任务,以后每隔3秒执行一次任务}}
import java.util.TimerTask;public class MyTask extends TimerTask {@Overridepublic void run() {System.out.println("1234123");}}
说明:写一个任务task,继承TimerTask,并重写run()方法,在run()方法里面编写需要执行的代码,然后new Timer()生产Timer的一个对象,通过调用Timer对象的schedule(arg1,arg2,arg3)方法启动定时任务,schedule()有四个重载方法,这里采用有三个参数的方法,arg1是任务对象,arg2是多长时间后开始执行任务,arg3多长时间重复执行上面方法的意思是1秒后启动任务,以后每隔3秒执行一次任务。
2,启动一个线程死循环
public class Test {/** * @param args */public static void main(String[] args) { // 启动定时获取access_token的线程 new Thread(new TokenThread()).start(); }
public class TokenThread implements Runnable { private static Logger log = LoggerFactory.getLogger(TokenThread.class); // 第三方用户唯一凭证 public static String appid = ""; // 第三方用户唯一凭证密钥 public static String appsecret = ""; public static AccessToken accessToken = null; public void run() { while (true) { try { accessToken = WeixinUtil.getAccessToken(appid, appsecret); if (null != accessToken) { log.info("获取access_token成功,有效时长{}秒 token:{}", accessToken.getExpiresIn(), accessToken.getToken()); // 休眠7000秒 Thread.sleep((accessToken.getExpiresIn() - 200) * 1000); } else { // 如果access_token为null,60秒后再获取 Thread.sleep(60 * 1000); } } catch (InterruptedException e) { try { Thread.sleep(60 * 1000); } catch (InterruptedException e1) { log.error("{}", e1); } log.error("{}", e); } } } }
说明:通过实现Runnable创建了一个线程TokenThread,重写run()方法执行需要执行的代码,run()方法通过while(true)死循环不断的获取token,用Thread.sleep(7000)休眠,增加时间间隔。
第三种框架的不常用就不写了。
3、获取系统时间
获取系统时间有好几种方法,在里面总结一下常用的三种
1、
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date =new Date();String systime=ft.format(date);System.out.println(systime);
2,
SimpleDateFormat ft2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String systime2 =ft2.format(System.currentTimeMillis());System.out.println(systime2);
3,
Calendar c = Calendar.getInstance();int year =c.get(Calendar.YEAR);int month =c.get(Calendar.MONTH+1);int day = c.get(Calendar.DATE);int hour = c.get(Calendar.HOUR_OF_DAY);int minute = c.get(Calendar.MINUTE);int second = c.get(Calendar.SECOND);System.out.println(year+"/"+month+"/"+day+" "+hour+":"+minute+":"+second);
- 20170103
- 20170103:for 统计思维
- 20170103SNMP的用OID查MIB
- [李景山php]每天TP5-20170103|thinkphp5-Exception.php
- 占坑 20170103-20170104调试rtlab,rtlab库安装
- 记录weex接入过程
- [生存志] 第96节 南华著真经
- error: stray ‘\357’ in program
- Linux创建用户和用户组的操作
- 简单使用JQ代码 实现全选 反选 全不选 批删
- 20170103
- 完全数的计算【编程题】
- 学好数据结构的重要性
- NOIP游记
- 第6章 面向对象的程序设计(1)理解对象
- WordCount代码实现
- “+”、“&”、换行等,转义字符
- 如何估算网站日承受最大访问PV ,你想建设一个能承受500万PV/每天的网站吗?如果计算呢?
- 使用synergy实现键鼠共享