103 lines
3.5 KiB
Java
103 lines
3.5 KiB
Java
package cn.palmte.work.service;
|
||
|
||
import cn.palmte.work.model.SlideCaptcha;
|
||
import cn.palmte.work.model.SlideCaptchaRepository;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.stereotype.Service;
|
||
import top.jfunc.common.utils.StrUtil;
|
||
|
||
import java.util.Date;
|
||
|
||
/**
|
||
* @author xiongshiyan at 2020/9/30 , contact me with email yanshixiong@126.com or phone 15208384257
|
||
*/
|
||
@Service
|
||
public class SlideCaptchaService {
|
||
private static final Logger logger = LoggerFactory.getLogger(SlideCaptchaService.class);
|
||
|
||
|
||
@Autowired
|
||
private SlideCaptchaRepository slideCaptchaRepository;
|
||
|
||
@Value("${fourcal.slideInterval:1800000}")
|
||
private long slideInterval;
|
||
|
||
/**
|
||
* @param serialNumber 序列号
|
||
*/
|
||
public boolean updateCaptcha(String serialNumber, String identifier, int x, int y){
|
||
if(StrUtil.isEmpty(serialNumber) || StrUtil.isEmpty(identifier)){
|
||
return false;
|
||
}
|
||
|
||
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
|
||
if(null == slideCaptcha){
|
||
slideCaptcha = new SlideCaptcha();
|
||
slideCaptcha.setSerialNumber(serialNumber);
|
||
slideCaptcha.setStatus(SlideCaptcha.STATUS_INIT);
|
||
}
|
||
|
||
slideCaptcha.setX(x);
|
||
slideCaptcha.setY(y);
|
||
slideCaptcha.setIdentifier(identifier);
|
||
slideCaptcha.setModifyTime(new Date());
|
||
slideCaptchaRepository.saveAndFlush(slideCaptcha);
|
||
|
||
return true;
|
||
}
|
||
/**
|
||
* @param serialNumber 序列号
|
||
*/
|
||
public boolean verifyCaptcha(String serialNumber, String identifier, int x, int y, int allowance){
|
||
if(StrUtil.isEmpty(serialNumber) || StrUtil.isEmpty(identifier)){
|
||
return false;
|
||
}
|
||
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
|
||
if(slideCaptcha == null || !identifier.equals(slideCaptcha.getIdentifier())){
|
||
return false;
|
||
}
|
||
|
||
//slide_interval=1800000
|
||
if((System.currentTimeMillis() - slideCaptcha.getModifyTime().getTime()) > slideInterval){
|
||
return false;
|
||
}
|
||
//只判断x,不判断y
|
||
Integer integer = slideCaptcha.getX();
|
||
boolean b = x >= integer - allowance && x <= integer + allowance;
|
||
if(b){
|
||
//校验成功则更新以待后续的校验
|
||
slideCaptcha.setStatus(1);
|
||
slideCaptchaRepository.saveAndFlush(slideCaptcha);
|
||
}
|
||
return b;
|
||
|
||
}
|
||
public boolean verifyCaptcha(String serialNumber, String identifier){
|
||
if(StrUtil.isEmpty(serialNumber) || StrUtil.isEmpty(identifier)){
|
||
return false;
|
||
}
|
||
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
|
||
if(slideCaptcha == null || !identifier.equals(slideCaptcha.getIdentifier())){
|
||
return false;
|
||
}
|
||
|
||
if((System.currentTimeMillis() - slideCaptcha.getModifyTime().getTime()) > slideInterval){
|
||
return false;
|
||
}
|
||
//查看校验成功没有
|
||
return SlideCaptcha.STATUS_SUCCESS == slideCaptcha.getStatus();
|
||
|
||
}
|
||
|
||
public boolean deleteCaptchaBy(String serialNumber){
|
||
SlideCaptcha slideCaptcha = slideCaptchaRepository.findFirstBySerialNumberEquals(serialNumber);
|
||
if(null != slideCaptcha){
|
||
slideCaptchaRepository.delete(slideCaptcha);
|
||
}
|
||
return true;
|
||
}
|
||
}
|