fourcal/src/main/java/cn/palmte/work/service/SlideCaptchaService.java

103 lines
3.5 KiB
Java
Raw Normal View History

2021-10-28 08:09:50 +00:00
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;
}
}