java实现图片滑动验证(包含前端代码)

来讲解一下 "Java实现图片滑动验证" 的攻略。首先,我们需要了解到 "图片滑动验证" 的原理,这个验证方式分为两张图片,一张为底图,一张为拼图。接着,我们需要将底图和拼图进行重合,形成完整的图片才能通过验证。

具体实现方法步骤如下:
1. 前端页面在页面加载时生成拼图及底图,并加入到页面的 DOM 元素中;
2. 将图片拼接成一张长图,然后随机截取一部分,再添加滑块,形成带滑块的图片;
3. 用户拖动滑块进行验证,前端将验证码信息发送给后端;
4. 后端校验滑块移动的距离,以判断是否发送过来的是由人工进行操作,而非自动化脚本。

下面是Java实现图片滑动验证的完整步骤:

  1. 后端生成验证 token
    后端通过创建一个 UUID 作为唯一标识码,用于后期判断是否校验成功的依据。

  2. 前端页面生成图片
    前端生成滑块和底图,并将滑块和底图发送给后端。前端可以使用 <img> 标签加载验证码图片,底图和滑块可以拼接成一张长图,使用 CSS 和 JS 控制滑块的滑动效果。前端把拼接后的图片和 token 发输到后台。

  3. 后端判断滑块的位置
    后端拥有滑块的背景图及滑块位置,判断滑块距离边缘的距离,计算偏移量。如果计算成功则返回校验成功,否则校验失败。

下面来看两个具体的示例步骤:

示例一:

  1. 后端生成验证 token
    后端使用 UUID 作为标识码,生成一个 token:9570b751-a257-462a-a242-277e268bd6bf。

  2. 前端页面生成图片
    前端生成底图 bg.jpg 和拼图 block.jpg,并将拼图和底图合并为一张图片 captcha.jpg。然后将滑块嵌入到底图中,生成一个拼图验证的图片和 token,将拼接图片和 token 发输到后台。

<div class="captcha-box">
    <img class="bg" src="bg.jpg" alt="底图">
    <div class="block" style="background-image:url(block.jpg)"></div>
    <img class="cover" src="captcha.jpg" alt="验证码">
</div>
<script>
//代码用于控制滑块滑动效果
</script>
  1. 后端判断滑块的位置
    后端接收前端发送过来的 token 和计算出的滑块偏移量,然后通过比较来判断是否成功,如果成功返回 true 否则返回 false。

示例二:

  1. 后端生成验证 token
    后端使用 UUID 作为标识码,生成一个 token:ef64d483-9ad7-4860-a271-4af3c9f0a137。

  2. 前端页面生成图片
    前端生成底图 bg.png 和拼图 block.png,并将拼图和底图合并为一张图片 captcha.png。然后将滑块嵌入到底图中,生成一个拼图验证的图片和 token,将拼接图片和 token 发输到后台。

<div class="captcha-box">
    <img class="bg" src="bg.png" alt="底图">
    <div class="block" style="background-image:url(block.png)"></div>
    <img class="cover" src="captcha.png" alt="验证码">
</div>
<script>
//代码用于控制滑块滑动效果
</script>
  1. 后端判断滑块的位置
    后端接收前端发送过来的 token 和计算出的滑块偏移量,然后通过比较来判断是否成功,如果成功返回 true 否则返回 false。

这就是Java实现图片滑动验证的完整攻略啦,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现图片滑动验证(包含前端代码) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxDropDownList unselectIndex()方法

    jQWidgets jqxDropDownList unselectIndex()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDrop是Widgets组用于实现下拉列表。本文将详细介绍如何使用jqxDropDownList的unselectIndex()方法提供两个示例。 jqxDropDownList …

    jquery 2023年5月10日
    00
  • 提升jQuery的性能需要做好七件事

    当网站中使用大量的jQuery代码时,为了让页面加载速度更快,提升用户的体验,我们需要做好以下七件事: 1. 缩小选择集范围 在编写jQuery代码时,应该尽可能缩小选择器选定的元素范围,尽量不要使用通配符或者过于广泛的选择器,以减少DOM的搜索次数。 示例1: // 不好的写法 $(‘ul li a’).click(function(){}); // 优化…

    jquery 2023年5月28日
    00
  • jQuery UI Slider widget()方法

    以下是关于 jQuery UI 滑块 widget() 方法的详细攻略: jQuery UI 滑块 widget() 方法 widget() 方法用于获取滑块的 jQuery UI 对象。通过该方法可以获取滑块的所有属性和方法。 语法 $( ".selector" ).slider( "widget" ); 示例一:获…

    jquery 2023年5月11日
    00
  • jQWidgets jqxGrid columnmenuclosing属性

    以下是关于“jQWidgets jqxGrid columnmenuclosing属性”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件的 columnmenuclosing 属性用于在列菜单关闭时触发事件。 完整攻略 以下是 jqxGrid 控件 columnmenuclosing 属性的完整攻略: 监听 columnmenuclosing 事件…

    jquery 2023年5月10日
    00
  • jQWidgets jqxTabs enable()方法

    下面是关于 jQWidgets jqxTabs enable() 方法的详细攻略。 什么是 jQWidgets jqxTabs jQWidgets 是一个基于jQuery框架的UI 组件库,提供了许多交互式和响应式的UI组件。其中之一就是jqxTabs组件,它是可以通过点击标签页快速切换不同内容的切换组件。 enable() 方法介绍 jqxTabs 的 e…

    jquery 2023年5月12日
    00
  • jQuery中on()和live()或bind()的区别

    在jQuery中,on()、live()和bind()都是用于绑定事件处理程序的方法。虽然它们的作用相似,但它们之间有一些区别。以下是详细攻略,含两个示例,演示on()、live()和bind()的区别: bind()方法 bind()方法用于将一个或多个事件处理程序绑定到一个或多个素上。它的语法如下: $(selector).bind(event, dat…

    jquery 2023年5月9日
    00
  • jQWidgets jqxEditor 本地化属性

    jQWidgets jqxEditor 本地化属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI件和工具,包括表格、日历、下拉菜单等。jqxEditor是jQWidgets中的一个富文本器组件,用于创建富文本编辑器。localization属性是jqxEditor`中的一个属性,用于设置富文本编辑器的本地化。 localizatio…

    jquery 2023年5月9日
    00
  • jQuery * 选择器

    以下是关于jQuery *选择器的完整攻略: 什么是*选择器? *选择器是jQuery中一种选择器,用选择所有元素。 如何使用*选择器? 使用以下代码选择所有元素: $("*") 这个代码中,*是指选择所有元素。 示例1:选择所有元素并添加样式 $("*").css("border", "…

    jquery 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部