首页 > 编程语言 >JavaSwing实现验证码功能

JavaSwing实现验证码功能

时间:2023-08-07 18:25:28浏览次数:31  
标签:... 功能 验证码 CaptchaGUI new JavaSwing public

JavaSwing实现验证码功能

在Web应用程序开发中,验证码(CAPTCHA)是一种常见的安全措施,用于防止自动化机器人和恶意软件对网站进行攻击。本文将介绍如何使用JavaSwing来实现验证码功能,以帮助您加强Web应用程序的安全性。

JavaSwing实现验证码功能

一、什么是验证码?

验证码是一种通过人机交互验证用户是否为人类的技术。它通常由一张包含随机字符的图片和一个文本框组成。用户需要输入图片中显示的字符,并提交给服务器进行验证。如果用户输入的字符与服务器生成的字符一致,那么用户被认定为是人类而不是机器人。

二、使用JavaSwing创建验证码界面

要实现验证码功能,首先需要创建一个图形用户界面(GUI),用于显示验证码图片并接收用户输入。JavaSwing是一个功能强大且易于使用的GUI库,它提供了丰富的组件和布局管理器来构建用户界面。

代码示例:


import javax.swing.*;

import java.awt.*;

public class CaptchaGUI extends JFrame {

private JLabel captchaImageLabel;

private JTextField captchaTextField;

private JButton verifyButton;

public CaptchaGUI() {

setTitle(\验证码\ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(300, 200);

captchaImageLabel = new JLabel();

captchaTextField = new JTextField();

verifyButton = new JButton(\验证\ setLayout(new BorderLayout());

add(captchaImageLabel, BorderLayout.CENTER);

add(captchaTextField, BorderLayout.NORTH);

add(verifyButton, BorderLayout.SOUTH);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(() -> {

CaptchaGUI captchaGUI = new CaptchaGUI();

captchaGUI.setVisible(true);

});

}

}

 

三、生成验证码图片

为了创建验证码图片,需要使用Java的Graphics2D类来绘制包含随机字符的图片。验证码图片应具有一定的复杂性,以防止机器人通过简单的图像处理技术进行破解。

代码示例:


import java.awt.*;

import java.awt.image.BufferedImage;

import java.util.Random;

public class CaptchaGenerator {

private static final int WIDTH = 120;

private static final int HEIGHT = 40;

private static final String CHARACTERS = \ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\ private static final int CHAR_LENGTH = CHARACTERS.length();

private static final int CODE_LENGTH = 4;

public static BufferedImage generateCaptcha() {

BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

Graphics2D graphics = image.createGraphics();

Random random = new Random();

graphics.setColor(Color.WHITE);

graphics.fillRect(0, 0, WIDTH, HEIGHT);

StringBuilder captchaCode = new StringBuilder();

for (int i = 0; i < CODE_LENGTH; i++) {

char character = CHARACTERS.charAt(random.nextInt(CHAR_LENGTH));

captchaCode.append(character);

int x = (i * WIDTH / CODE_LENGTH) + 10;

int y = HEIGHT / 2 + random.nextInt(10) - 5;

graphics.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)));

graphics.setFont(new Font(\Arial\ Font.BOLD, random.nextInt(10) + 20));

graphics.drawString(Character.toString(character), x, y);

}

graphics.dispose();

return image;

}

}

 

四、将验证码图片显示在界面上

使用JavaSwing的JLabel组件可以将验证码图片显示在界面上。在界面初始化时,调用CaptchaGenerator.generateCaptcha()方法生成验证码图片,并设置给JLabel的Icon属性。

代码示例:


public class CaptchaGUI extends JFrame {

// ...

public CaptchaGUI() {

// ...

captchaImageLabel = new JLabel();

BufferedImage captchaImage = CaptchaGenerator.generateCaptcha();

ImageIcon captchaIcon = new ImageIcon(captchaImage);

captchaImageLabel.setIcon(captchaIcon);

// ...

}

// ...

}

 

五、验证用户输入

用户需要在验证码图片下方的文本框中输入验证码,并点击“验证”按钮提交验证请求。在按钮的点击事件处理方法中,获取用户输入的验证码,并与服务器生成的验证码进行比较。如果一致,则验证通过,否则验证失败。

代码示例:


public class CaptchaGUI extends JFrame {

// ...

public CaptchaGUI() {

// ...

verifyButton.addActionListener(e -> {

String userInput = captchaTextField.getText();

String captchaCode = getCaptchaCodeFromServer(); // 从服务器获取验证码

if (userInput.equals(captchaCode)) {

JOptionPane.showMessageDialog(this, \验证通过!\ } else {

JOptionPane.showMessageDialog(this, \验证失败!\ }

});

// ...

}

// ...

}

 

六、总结

本文介绍了如何使用JavaSwing来实现验证码功能。通过创建验证码界面、生成验证码图片、将图片显示在界面上以及验证用户输入,我们可以实现一个简单而有效的验证码功能,提高Web应用程序的安全性。希望本文对您编程开发的学习有所帮助!

本文部分代码转自:https://www.ktiao.com/java/2023-08/251763.html

标签:...,功能,验证码,CaptchaGUI,new,JavaSwing,public
From: https://www.cnblogs.com/wodianpingcom/p/17612142.html

相关文章

  • 视频融合平台视频汇聚平台LiteCVR新功能播放限制概念分享教程
    LiteCVR平台可以在复杂的网络环境中集中管理和整合各种分散的视频资源,实现视频资源的身份验证、按需访问、全网传播和智能分析等功能。该平台支持多种协议和设备类型的接入,包括GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、海康Ehome等,并最近扩展了更多的SDK接入,如华为SDK、宇视S......
  • JavaSwing布局:JPanel(面板)和LayoutManager(布局管理器)
    把Swing的各种组件(JComponent)添加到面板容器中(JPanel),需要给面板容器指定布局管理器(LayoutManager),明确容器(Container)内的各个组件之间的排列布局方式。常用的布局管理器:1流式布局,按组件加入的顺序,按水平方向排列,排满-行换下一行继续排列。2网格布局,把Container按......
  • Siemens 西门子S7-1200 PID功能组态
    在我们实际工作经常会用到PID控制系统,比如控制恒压供水设备,恒温加热设备等。这些设备使用PLC进行控制时,不仅仅需要编程,还需要设置相关参数(或者说组态)。只有正确设置了相关参数之后,程序编写的才有意义。那么今天我们以西门子1200PLC为例,给大家讲讲如何组态PID功能。在组态......
  • Teamcenter 启用零部件相同ID,不同类型的功能
    1.设置BMIDE的对应Item的常量属性:2.每个需要重复ID类型都设置一次:3.打包bmide,冷部署:4.完成后验证: ......
  • ps 2023 v25.0 AI功能 Intel/m1/M2电脑均可!
    Photoshop2023是由Adobe开发的一款图像编辑软件,它被广泛用于图像处理、图形设计和数字艺术创作等领域。它拥有丰富的功能和工具,可以对图像进行裁剪、调整大小、修饰、修复、添加滤镜和特效等操作,同时也支持图层、蒙版、文字处理、色彩校正、绘画等高级功能。ps最新版本:https://......
  • Mitsubishi 三菱FXPLC学习之功能块指令
    在PLC的编程语言中,最简单的就是图形语言,如我们所学的梯形图与SFC,这两者在编程软件中都属于简单工程。而我之前所分享的文章中,讲到的那些基本指令和功能指令,都是基于简单梯形图形式进行示例。其实,对于很多功能(函数),如四则运算、比较传送等,在PLC编程中还有另外一种形式,那......
  • Mitsubishi 三菱FXPLC学习之功能指令格式解读
    随着自动化技术的发展,PLC已不仅仅是用于替代传统的继电控制系统。由于CPU的植入,PLC可以说是一台微型电脑,它除了能处理逻辑开关量外,还可以用于对数字的变换、运算、处理PLC与外部设备的数据传送和控制,以及程序流程控制等。这些强大的功能基本是得益于PLC的功能指令。PLC......
  • 【3D机甲】捏造型功能
    (文章目录)3D机甲捏造型功能通常包括以下小功能:模型选择:通过从库中选择机甲模型或导入自定义模型来开始设计。变形和调整:调整机甲的大小、比例、旋转和位置,以适应特定场景或体验。材质和纹理:为机甲选择不同的材质和纹理,以改变外观和视觉效果。部件修改:通过添加、删除......
  • uniapp实现左滑删除功能
      <delSlideLeft:item="item":data_transit="{index:index,item:item}"@delItem="delItem"></delSlideLeft><template><view><viewclass="box-slideLeft">......
  • 华为发布数字资产继承功能
    在华为开发者大会2023(HDC.Together)上,华为常务董事、终端BGCEO、智能汽车解决方案BUCEO余承东正式发布了数字资产继承功能,HarmonyOS提供了安全便捷的数字资产继承路径。在鸿蒙世界中,我们每个人在每台设备、应用中都沉淀了大量的数字资产,包括信息类资产,比如消息、照片、联系人、......