Java实现滑动验证码的示例代码

 更新时间:2022年02月28日 15:52:46   作者:灰太狼_cxh  
这篇文章主要为大家介绍了如何用Java语言实现滑动验证码的生成,项目采用了springboot,maven等技术,感兴趣的小伙伴可以跟随小编学习一下

功能:java实现滑动验证码

项目是采用springboot,maven

开发工具:采用idea

1.效果演示

2.后端代码

控制层

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

3.前端页面

<!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实现滑动验证码的示例代码的文章就介绍到这了,更多相关Java滑动验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中Map的computeIfAbsent方法详解

    Java中Map的computeIfAbsent方法详解

    这篇文章主要介绍了Java的Map中computeIfAbsent方法详解,在jdk1.8中Map接口新增了一个computeIfAbsent方法,这是Map接口中的默认实现该方法是首先判断缓存Map中是否存在指定的key的值,如果不存在,会调用mappingFunction(key)计算key的value,需要的朋友可以参考下
    2023-11-11
  • Java实现基础银行ATM系统

    Java实现基础银行ATM系统

    这篇文章主要为大家详细介绍了Java实现基础银行ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • java读取大文件简单实例

    java读取大文件简单实例

    这篇文章主要介绍了java读取大文件简单实例,有需要的朋友可以参考一下
    2013-12-12
  • SpringBoot与SpringMVC第一讲

    SpringBoot与SpringMVC第一讲

    SpringMVC全名应该叫做SpringWebMVC,它其实是基于servlet来构建的一个原始web框架从一开始就包含在了spring框架中,下面通过实例代码给大家介绍SpringBoot与SpringMVC的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • 解决swagger主页访问,返回报错500问题

    解决swagger主页访问,返回报错500问题

    在使用Swagger时遇到500错误,通过仔细的debug发现问题源于注解使用不当,具体表现为一个接口的入参被错误地注解了三个参数,而实际上只有两个,这导致了Swagger在解析时抛出了NullPointerException异常,解决方法是删除错误的第三个参数的注解
    2024-09-09
  • FeignClient服务器抛出异常客户端处理方案

    FeignClient服务器抛出异常客户端处理方案

    这篇文章主要介绍了FeignClient服务器抛出异常客户端处理方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java之ThreadPoolExecutor类详解

    Java之ThreadPoolExecutor类详解

    这篇文章主要介绍了Java之ThreadPoolExecutor类详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java如何给Word文档添加多行文字水印

    Java如何给Word文档添加多行文字水印

    这篇文章主要介绍了Java如何给Word文档添加多行文字水印,文章图文讲解的很清晰,有对于这方面不太懂得同学可以学习下
    2021-02-02
  • JVM执行引擎的项目实践

    JVM执行引擎的项目实践

    执行引擎是Java虚拟机核心的组成部分之一,本文主要介绍了JVM执行引擎的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • 基于Java实现五子棋小游戏(附源码)

    基于Java实现五子棋小游戏(附源码)

    这篇文章主要为大家介绍了如何通过Java实现简单的五子棋游戏,文中的示例代码讲解详细,对我们学习Java游戏开发有一定帮助,需要的可以参考一下
    2022-11-11

最新评论