做一个B/S的项目,要求有30天试用期,如果试用期总时间Total达到limit(总时间限制)就停止Tomcat服务器要求用户输入SN号注册后才能再次使用。
现在有两个问题:
1、需要在Tomcat服务器使用期间,每隔30分钟就判断下当前时间是不是在上次验证的时间之后,如果是就将(当前时间-上次验证时间的差值)加到Total里,然后再判断Total总时间是否超过limit限制,如果超过就停止Tomcat服务器,如果没有,允许用户继续使用。
我的操作:因为要用到定时触发,所以我用Quartz框架,没有用Spring,用了quartz的plugin ,用一个jobs.xml设置了一个CronTrigger 0 0/30 * * * ?。每隔三十分钟触发Job一次。
在测试时,我将机器的系统时间提前,按照逻辑判断,系统时间早于上次验证的时间,要停止Tomcat服务器,可是由于Quartz是按照时间的触发点触发事件的,没有到达触发的时间点的话,就会一直等待,这样Job中的逻辑判断就不能被执行,如此一来,用户启动Tomcat后,只要提前系统时间,就可以延长试用期限,直到触发时间到才进行逻辑判断。
问题:如何防止用户修改机器时间来延长试用期?
2没什么描述的:如何用Java实现对Tomcat服务的启动和关闭?
个人感觉,用Runtime.getRuntime().exec("cmd.exe /c %CATALINA_HOME%\\bin\\shutdown.bat"),
可我在环境变量里设置了CATALINA_HOME,用
Process proc = Runtime.getRuntime().exec("cmd.exe /c echo %CATALINA_Home%");
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = br.readline;
可结果却是:%CATALINA_HOME% ,但在命令提示符下能正常得到。
把:%CATALINA_HOME%直接写成绝对路径,仍然不行!
请大家给以帮助,如果讨论结果理想,会加分!!
现在有两个问题:
1、需要在Tomcat服务器使用期间,每隔30分钟就判断下当前时间是不是在上次验证的时间之后,如果是就将(当前时间-上次验证时间的差值)加到Total里,然后再判断Total总时间是否超过limit限制,如果超过就停止Tomcat服务器,如果没有,允许用户继续使用。
我的操作:因为要用到定时触发,所以我用Quartz框架,没有用Spring,用了quartz的plugin ,用一个jobs.xml设置了一个CronTrigger 0 0/30 * * * ?。每隔三十分钟触发Job一次。
在测试时,我将机器的系统时间提前,按照逻辑判断,系统时间早于上次验证的时间,要停止Tomcat服务器,可是由于Quartz是按照时间的触发点触发事件的,没有到达触发的时间点的话,就会一直等待,这样Job中的逻辑判断就不能被执行,如此一来,用户启动Tomcat后,只要提前系统时间,就可以延长试用期限,直到触发时间到才进行逻辑判断。
问题:如何防止用户修改机器时间来延长试用期?
2没什么描述的:如何用Java实现对Tomcat服务的启动和关闭?
个人感觉,用Runtime.getRuntime().exec("cmd.exe /c %CATALINA_HOME%\\bin\\shutdown.bat"),
可我在环境变量里设置了CATALINA_HOME,用
Process proc = Runtime.getRuntime().exec("cmd.exe /c echo %CATALINA_Home%");
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = br.readline;
可结果却是:%CATALINA_HOME% ,但在命令提示符下能正常得到。
把:%CATALINA_HOME%直接写成绝对路径,仍然不行!
请大家给以帮助,如果讨论结果理想,会加分!!
如果不是停服务器,登陆时,判断这个时间控制表。
这还是存在第一个问题啊!
如果quartz的启动时间是2008-09-19 16:00:00
用户将机器时间提前到2008-09-01 16:00:00那
这段时间差quartz不会被触发,判断自然不能执行
2、好像要加一个-c什么的参数的,忘记了,可以上google查一下。
你说的timer应该就是一个SimpleTrigger吧?
时间设在1970前, 是不是SimpleTrigger.setStartTime(Date startTime)
您 可以试一下,如果startTime设在1970年,那永远也不会触发的,
而且更改时间也是一样的问题
当给客户使用系统的时候,初始化到数据库里一个默认的时间,比如是0,然后quartz每隔30分钟执行一次,把0+30,然后存入数据库中,然后再过30分钟,再取出30+30,知道最后超过时间总和,提示。至于控制tomcat启动与关闭的,可以使用嵌入tomcat来实现,用java程序模拟实现server.xml中的各个节点。似乎很简单,网上有这样的资料
这样啊,那你可以把start time设成2007年。然后在你的顶目初始化的时候(或者是某个业务逻辑必经的方法内)比较一下系统时间,如果小于2007年就报错。
只要修改了系统时间后,quartz就会一直等到下次的触发时间到了才会执行+30的操作,这样从用户修改的系统时间到quartz下一次的触发时间这段时间就不会被记录,也就相当于用户增加了试用时间。
不过您说的tomcat方面我不太清楚,能详细点么?我的[email protected],可以的话,交流下。回10:
如果quartz的start time比当前的时间早,那这个job就永远不会被触发!