本发明涉及计算机技术领域,更具体地,涉及一种鉴权中时间同步控制方法及系统。
背景技术:
在服务器与客户端的数据通信过程中,为了保护数据的安全,通常会对数据进行鉴权处理,在鉴权处理的过程中,时常会使用到时间参数作为一个鉴权项。如果客户端和服务器的时间差超过一定的阈值就会导致客户端发送的请求在服务器被拒绝,拒绝的原因是因为鉴权失败。
在鉴权的过程中,通常会由于客户端时间和服务器时间不一致,从而导致在鉴权时,客户端和服务器的时间差超过阈值而鉴权失败,鉴权的结果会出现问题,不够准确。
技术实现要素:
本发明提供一种克服上述问题或者至少部分地解决上述问题的鉴权中时间同步控制方法及系统,能够克服由于客户端时间和服务器时间不一致导致的鉴权失败的问题。
根据本发明的第一方面,提供一种鉴权中时间同步控制方法,包括:
s1,获取本地系统时间和服务器系统时间;
s2,计算服务器系统时间和本地系统时间之间的时间差值;
s3,在向服务器发送鉴权信息时,将获取的当前本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
本发明的有益效果为:不间断地对本地系统时间和服务器系统时间计算时间差值,来维系服务器和客户端之间时间的不同,在发送鉴权信息时,将本地时间加上时间差值的方式来保证本地时间和服务器时间的同步,有效的避免了因为客户端和服务器时间的不同导致鉴权失败的问题。
在上述技术方案的基础上,本发明还可以作如下改进。
进一步的,所述步骤s2还包括:
在内存中定义全局静态变量,将所述时间差值作为全局静态变量保存于内存静态区中。
进一步的,还包括:
通过预设的触发方式重新获取本地系统时间和服务器系统时间,并重新计算时间差值。
进一步的,所述通过预设的触发方式重新获取本地系统时间和服务器系统时间,并重新计算时间差值包括:
监听客户端的系统时间变更的事件信息,当监听到系统时间变更的事件信息时,重新获取本地系统时间和服务器系统时间,并重新计算时间差值,且利用重新计算的时间差值对内存静态区中保存时间差值的全局静态变量进行更新。
进一步的,所述监听客户端的系统时间变更的事件信息包括:
通过向系统注册广播订阅器接收系统时间设置的广播信息,实现监听客户端的系统时间变更的事件信息。
进一步的,所述通过预设的触发方式重新获取本地系统时间和服务器系统时间,并重新计算时间差值包括:
设置周期性的定时器,当定时器达到超时阈值时,自动触发定时任务分别获取本地系统时间和服务器系统时间,并重新计算时间差值,且利用重新计算的时间差值对内存静态区中保存时间差值的全局静态变量进行更新。
根据本发明的第二方面,还提供了一种鉴权中时间同步控制系统,包括:
获取模块,用于获取本地系统时间和服务器系统时间;
计算模块,用于计算服务器系统时间和本地系统时间之间的时间差值,以便在向服务器发送鉴权信息时,将获取的当前本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
进一步的,还包括监听模块和更新模块;
所述监听模块,用于监听客户端的系统时间变更的事件信息,当监听到系统时间变更的事件信息时,调用所述获取模块和所述计算模块;
所述更新模块,用于利用再次计算得到的服务器系统时间和本地系统时间的时间差值之前计算的时间差值进行更新。
进一步的,还包括定时器:
所述定时器,用于当达到超时阈值时,自动触发定时任务分别获取本地系统时间和服务器系统时间,并调用所述计算模块;
所述更新模块,还用于:
利用再次计算的服务器系统时间和本地系统时间的时间差值,对之前计算的时间差值进行更新。
根据本发明的第三方面,还提供了一种鉴权中时间同步控制方法的设备,包括处理器(processor)、存储器(memory)和总线;
所述处理器和存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:
获取本地系统时间和服务器系统时间;
计算服务器系统时间和本地系统时间的时间差值;
在向服务器发送鉴权信息时,将获取的本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
附图说明
图1为本发明一个实施例的鉴权中时间同步控制方法流程图;
图2为本发明另一个实施例的鉴权中时间同步控制系统连接框图;
图3为本发明又一个实施例的鉴权中时间同步控制系统的整体连接框图;
图4为本发明再一个实施例的鉴权中时间同步控制方法的设备连接框图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
参见图1,提供了本发明一个实施例的鉴权中时间同步控制方法,包括:s1,获取本地系统时间和服务器系统时间;s2,计算服务器系统时间和本地系统时间的时间差值;s3,在向服务器发送鉴权信息时,将获取的当前本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
在服务器和客户端通信的过程中,为了安全,通常会对数据进行鉴权处理,鉴权处理的过程中通常会使用到时间参数,当客户端系统时间和服务器系统时间之间的时间差超过一定的阈值就会鉴权失败。在实际鉴权过程中,经常会存在由于客户端时间和服务器时间不同而导致鉴权失败。
因此,本实施例提出了对客户端时间和服务器时间不同的校准。具体为,获取本地系统时间和服务器系统时间,并计算服务器系统时间和客户端系统时间之间的时间差值。在客户端向服务器发送鉴权信息时,将获取的当前本地系统时间和时间差值之和作为鉴权时间信息。对本地系统时间利用时间差值进行补偿,使得本地系统时间和服务器系统时间保持一致。
服务器和客户端的时间都是以毫秒为单位的,因此,获取本地系统时间和服务器系统时间是以毫秒为单位的。在获取本地系统时间时,通过调用系统中的system.currenttimemillis()这个函数来得到当前系统距离1970年1月1日的毫秒时间差。由于这个数字比较大,为了确保数据不会溢出,使用长整型long的变量localtime来存储这个时间值。
在获取服务器的系统时间时,在服务器端设计了一个接口http://www.xxx.com/getservertime专门用于和服务器通信,并将服务器系统时间返回给客户端。客户端通过标准的http请求访问接口http://www.xxx.com/getservertime,通过该接口用于向客户端返回服务器系统时间,所以该接口的访问不需要做鉴权的操作,能够直接返回服务器系统时间。服务器会通过时间获取函数gettime()来获取当前的系统时间,并将这个时间存储在servertime变量中,然后将servertime中的值返回给客户端。客户端通过上述标准的http(hypertexttransferprotocol,超文本传输协议)协议请求就能获取到服务器的系统时间。
本实施例通过对本地系统时间和服务器系统时间计算时间差值,来维系服务器和客户端之间时间的不同,在发送鉴权信息时,将本地时间加上时间差值的方式来保证本地时间和服务器时间的同步,有效的避免了因为客户端和服务器时间的不同导致鉴权失败的问题。
在本发明的一个实施例中,所述步骤s2还包括:在内存中定义全局静态变量,将所述时间差值作为全局静态变量保存于内存静态区中。
通过上述实施例可以获取到本地时间localtime和服务器系统时间servertime,为了方便系统中任意位置都能够方便地访问到该时间差值,本实施例将该时间差值保存为一个全局静态变量。具体为通过在内存中定义全局静态变量statictimediff来进行保存,其中,timediff的值就是servertime-localtime的差值,这样就在内存的静态区中长期保存了时间差值timediff。
在本发明的另一个实施例中,提供的鉴权中时间同步控制方法还包括:通过预设的触发方式重新获取本地系统时间和服务器系统时间,并重新计算时间差值。
在对服务器的系统时间和客户端的系统时间的时间差值的计算过程中,会出现多种情况,导致客户端的本地系统时间会变化。比如,用户主动修改客户端的本地系统时间,这个时候需要重新获取本地系统时间和服务器系统时间,并重新计算时间差值,利用重新计算的时间差值更新内存静态区中保存时间差值的全局静态变量。在此后向服务器发送鉴权信息时,采用本地系统时间与更新后的时间差值之和作为鉴权时间参数。
在本发明的一个实施例中,所述通过预设的触发方式重新获取本地系统时间和服务器系统时间,并重新计算时间差值包括:
监听客户端的系统时间变更的事件信息,当监听到系统时间变更的事件信息时,重新获取本地系统时间和服务器系统时间,并重新计算时间差值,且利用重新计算的时间差值对内存静态区中保存时间差值的全局静态变量进行更新。
当用户主动修改客户端的本地系统时间时,本实施例监听客户端的系统时间变更的事件信息。在android系统中监听用户修改系统时间的事件时通过监听系统广播的方式来实现的。为了监听系统的时间变化信息,需要向系统注册监听时间变更的广播信息。系统中监听设置时间的广播事件为:
<actionandroid:name="android.intent.action.time_set"/>。
在系统中定义一意图类intent,通过intent中的构造函数获取到意图intent对象中的实例,给该实例添加事件过滤器,增加事件过滤器的方法是调用intent对象中的addcategory(android.intent.action.time_set")方法,然后再调用register(intent)方法来向系统中注册事件"android.intent.action.time_set"的变更监听。
通过上述方式,就能够接收到系统时间设置的广播消息,当接收到广播消息后,重新获取本地系统时间和服务器系统时间,以及重新计算服务器系统时间和本地系统时间的时间差值,此后,当客户端向服务器再次发送鉴权信息时,将当前本地系统时间和再次计算的时间差值之和作为鉴权时间参数。
在本发明的另一个实施例中,所述通过预设的触发方式重新获取本地系统时间和服务器系统时间,并重新计算时间差值包括:设置周期性的定时器,当定时器达到超时阈值时,自动触发定时任务分别获取本地系统时间和服务器系统时间,并重新计算时间差值,且利用重新计算的时间差值对内存静态区中保存时间差值的全局静态变量进行更新。
通过上述实施例能够计算出服务器系统时间和本地系统时间之间的时间差值,能够保证在鉴权的时候时间参数的准确性。但是考虑到硬件的时间是基于晶振来进行触发的,即一种时间的振荡器来触发的。不同硬件设备的晶振体是不一样的,因此,随着时间的推移,时间上的误差会进行累积,从而导致客户端与服务器之间的时间偏差变大。因此,为了克服这种硬件上带来的不足,通过设置周期性的定时器,例如,定时周期设置为1天,当定时器达到超时阈值时,自动触发定时任务分别获取本地系统时间和服务器系统时间,并重新计算时间差值,且利用重新计算的时间差值对内存静态区中保存时间差值的全局静态变量进行更新。
本实施例通过定时来校正服务器系统时间和本地系统时间之间的误差,能够实时地保证在鉴权过程中不会因为客户端和服务器的时间不同步而导致客户端和服务器之间鉴权失败的问题。
参见图2,提供了本发明另一个实施例的鉴权中时间同步控制系统,包括获取模块21和计算模块22。
其中,获取模块21,用于获取本地系统时间和服务器系统时间。
计算模块22,用于计算服务器系统时间和本地系统时间之间的时间差值,以便在向服务器发送鉴权信息时,将获取的当前本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
参见图3,鉴权中时间同步控制系统还包括存储模块23、监听模块24、更新模块25和定时器26。
其中,存储模块23,用于在内存中定义全局静态变量,将所述时间差值作为全局静态变量保存于内存静态区中。
监听模块24,用于监听客户端的系统时间变更的事件信息,当监听到系统时间变更的事件信息时,调用所述获取模块21和所述计算模块22。
所述更新模块24,用于利用再次计算得到的服务器系统时间和本地系统时间的时间差值对内存静态区中保存时间差值的全局静态变量进行更新。
所述定时器26,用于当达到超时阈值时,自动触发定时任务分别获取本地系统时间和服务器系统时间,并调用所述计算模块22。
所述更新模块25,还用于利用再次计算的服务器系统时间和本地系统时间的时间差值,对内存静态区中保存时间差值的全局静态变量进行更新。
图4示出本申请实施例的鉴权中时间同步控制方法的设备的结构框图。
参照图4,鉴权中时间同步控制方法的设备包括:处理器(processor)401、存储器(memory)402和总线403;其中,所述处理器401和存储器402通过所述总线403完成相互间的通信。
所述处理器401用于调用所述存储器402中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:获取本地系统时间和服务器系统时间;计算服务器系统时间和本地系统时间的时间差值;在向服务器发送鉴权信息时,将获取的当前本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
本发明公开一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,该计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述对应实施例所提供的鉴权中时间同步控制方法,例如包括:获取本地系统时间和服务器系统时间;计算服务器系统时间和本地系统时间的时间差值;在向服务器发送鉴权信息时,将获取的当前本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
本发明还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述对应实施例所提供的鉴权中时间同步控制方法,例如包括:获取本地系统时间和服务器系统时间;计算服务器系统时间和本地系统时间的时间差值;在向服务器发送鉴权信息时,将获取的当前本地系统时间和所述时间差值之和作为鉴权的时间参数,使得本地系统时间和服务器系统时间保持一致。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的鉴权中时间同步控制方法的设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。
本发明提供的一种鉴权中时间同步控制方法及系统,不间断地对本地系统时间和服务器系统时间计算时间差值,来维系服务器和客户端之间时间的不同,在发送鉴权信息时,将本地时间加上时间差值的方式来保证本地时间和服务器时间的同步,有效地确保在鉴权过程中本地客户端时间和服务器时间的一致性,避免了因为客户端和服务器时间的不同导致鉴权失败的问题。
在整个时间同步方案中考虑了两种异常情况的处理,其一是当用户手动修改系统时间,对于此种场景进行了广播监听的处理,然后更新时间差值的方式来确保时间同步的准确性。其二是硬件的差异性导致时间的累积误差,通过设置周期性的定时方案来确保时间同步。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。