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;
|
|||
|
|
}
|
|||
|
|
}
|