实现思路很简单,通常都用它来作登陆判断,好比登陆的时候检查该用户是否还在有效期范围内,若是不在开始时间与结束时间以内,那么就代表该用户已通过期;前端
这样的话,首先就能够想起三个参数,第一个须要获取当前系统时间,由于咱们登陆的时候须要根据当前时间来判断,该用户是否还在有效期以内,而后再用数据库中获取该用户的开始时间与结束时间,这两个字段须要在数据库中存在;数据库
1.首先,我须要须要编写一个uti类,建立一个函数方法:函数
/** * 时间格式化转换 * @param time * @return */ public static long dateToTimestamp(String time) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = simpleDateFormat.parse(time); long ts = date.getTime()/1000; return ts; } catch (ParseException e) { return 0; } } /** * 传入参数返回布尔类型,在此方法进行逻辑判断,若是当前时间(currenttime)在开始时间(startTime)与结束时间(endTime)以内就 * 就返回true,不然就返回false * @param currenttime * @param startTime * @param endTime * @return */ public static boolean isUserChick(String currenttime,String startTime,String endTime){ long c= DateUtil.dateToTimestamp(currenttime); long s=dateToTimestamp(startTime); long e= DateUtil.dateToTimestamp(endTime); if (s<c&&c<e){ return true; }else { return false; } }
2.在登陆的拦截器中调用DateUtil中的isUserChick方法便可,须要传入三个参数,当前系统时间、开始时间、结束时间spa
/** *判断用户是否帐号正常 *登陆判断当前时间是否在开始时间和结束时间范围内,若是不在提示帐号过时 */ //获取当前系统时间 Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//能够方便地修改日期格式 String currenttime = dateFormat.format(date); //获取用户开始时间 String startTime = user.getStartTime(); //获取用户结束时间 String endTime = user.getEndTime(); //判断帐号是否过时 boolean flag=DateUtil.isUserChick(currenttime,startTime,endTime); if (flag==false){ throw new ExpiredCredentialsException(); }
由于咱们登录采用的是Shiro拦截器,因此,若是发现该用户再也不范围以内,直接抛出异常给前端便可;code
该模块还须要一点就是,若是传过来的开始时间与结束时间为空,那么就证实该用户是永久,再也不进入时间戳判断:orm
if (StringUtil.isNotEmpty(user.getStartTime())&&StringUtil.isNotEmpty(user.getEndTime())){}