小編給大家分享一下Java如何實現滑動驗證碼,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
功能:java實現滑動驗證碼
項目是采用springboot,maven
開發工具:采用idea



@Controller
public class SliderCodeController {
@Autowired
ResourceLoader resourceLoader;
@Autowired
private FileUtil fileUtil;
// 設置橫軸位置緩存
public static Cache< String, Integer > cacheg = CacheBuilder.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS)
.maximumSize(666666).build();
@GetMapping
@RequestMapping("index")
public String test(HttpServletRequest request, Model model) throws IOException {
return "index";
}
@GetMapping
@RequestMapping("getImg")
public @ResponseBody
Map< String, Object > getPic(HttpServletRequest request) throws IOException {
try {
File targetFile = fileUtil.getFile("target");
File tempImgFile = fileUtil.getFile("temp");
Map < String, Object > resultMap = VerifyImageUtil.pictureTemplatesCut(tempImgFile, targetFile);
// 生成流水號,這里就使用時間戳代替
String lno = Calendar.getInstance().getTimeInMillis() + "";
cacheg.put(lno, Integer.valueOf(resultMap.get("xWidth") + ""));
resultMap.put("capcode", lno);
// 移除橫坐標送前端
resultMap.remove("xWidth");
return resultMap;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
@GetMapping
@RequestMapping("checkImgCode")
public @ResponseBody Map < String, Object > checkcapcode(@RequestParam("xpos") int xpos,
@RequestParam("capcode") String capcode, HttpServletRequest request) throws IOException {
Map < String, Object > result = new HashMap< String, Object >();
Integer x = cacheg.getIfPresent(capcode);
if (x == null) {
// 超時
result.put("code", 3);
}
else if (xpos - x > 5 || xpos - x < -5) {
// 驗證失敗
result.put("code", 2);
}
else {
// 驗證成功
result.put("code", 1);
}
return result;
}
}@Component
public class FileUtil {
@Value("${file.path}")
private String filePath;
@Value("${file.target.path}")
private String targetFilePath;
@Value("${file.target.num}")
private Integer targetfileNum;
@Value("${file.temp.path}")
private String tempFilePath;
@Value("${file.temp.num}")
private Integer tempfileNum;
public File getFile(String type){
int num = 0;
String imgType = ".jpg";
String oldFilePath = "";
if(type.equals("target")){
num = new Random().nextInt(targetfileNum) + 1;
oldFilePath = targetFilePath;
} else if(type.equals("temp")){
num = new Random().nextInt(tempfileNum) + 1;
imgType = "-w.png";
oldFilePath = tempFilePath;
}
String path = filePath;
String fileImg = num + imgType;
String filePath = path + fileImg;
File pathFile = new File(path);
if(!pathFile.exists()){
pathFile.mkdirs();
}
File file = new File(filePath);
if(!file.exists()){
try {
file.createNewFile();
ClassPathResource classPathResource = new ClassPathResource(oldFilePath + fileImg);
InputStream inputStream = classPathResource.getInputStream();
if(inputStream.available() != 0){
FileUtils.copyInputStreamToFile(inputStream, file);
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
}<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>滑動驗證碼</title>
<link rel="stylesheet" href="/css/slide.css" rel="external nofollow" >
<script src="/js/jquery-1.11.1.min.js"></script>
<script src="/js/jquery.lgyslide.js"></script>
</head>
<body>
<div id="imgscode"></div>
<script>
$(function() {
setTimeout(function() {
createcode();
}, 1000)
}());
//顯示驗證碼
function createcode() {
$
.ajax({
type : 'POST',
url : '/getImg',
dataType : 'json',
success : function(data) {
if (data != null) {
$("#imgscode")
.imgcode(
{
frontimg : 'data:image/png;base64,'
+ data.slidingImage,
backimg : 'data:image/png;base64,'
+ data.backImage,
yHeight : data.yHeight,
refreshcallback : function() {
//刷新驗證碼
createcode();
},
callback : function(msg) {
console.log(msg);
var $this = this;
$
.ajax({
type : 'POST',
url : '/checkImgCode',
data : {
xpos : msg.xpos,
capcode : data.capcode
},
dataType : 'json',
success : function(
data) {
console
.log(data)
if (data.code == 1) {
$this
.getsuccess();
} else {
if (data.code == 4) {
createcode();
} else if (data.code == 3) {
$this
.getfail("驗證碼過期,請刷新");
} else {
$this
.getfail("驗證不通過");
}
}
}
})
}
});
}
}
})
}
</script>
</body>
</html>看完了這篇文章,相信你對“Java如何實現滑動驗證碼”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。