一、创建web项目

二、生成验证码

创建VcodeObject.java,存储验证码与图片

package com.demo.vcode;

import java.io.InputStream;

public class VcodeObject {

private String code;

private InputStream in;

public VcodeObject() {

}

public VcodeObject(String code, InputStream in) {

this.code = code;

this.in = in;

}

//getters & setters

}

创建Vcode.java生成验证码与图片

package com.demo.vcode;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Random;

import javax.imageio.ImageIO;

public class Vcode {

public VcodeObject create() {

// 生成随机验证码

String code = this.generateRandomVerifyCode(4);

// 生成附带验证码的图片

BufferedImage img = this.generateImgWithCode(code, 80, 34);

InputStream in = this.putImgInStream(img);

return new VcodeObject(code, in);

}

/**

* 随机生成验证码

*

* @param length

* @return String

*/

private String generateRandomVerifyCode(int length) {

// 需要生成验证码的长度

if (length <= 0 || length >= 8)

length = 4;

// 随机生成字符的范围

String scope = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

StringBuffer code = new StringBuffer();

Random random = new Random();

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

code.append(scope.charAt(random.nextInt(62)));

}

return code.toString();

}

/**

* 生成带有验证码的图片

*

* @param code

* @param width

* @param height

* @return BufferedImage

*/

private BufferedImage generateImgWithCode(String code, int width, int height) {

BufferedImage img = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics brush = img.getGraphics();

// 设置背景和边框颜色

brush.setColor(this.getColor());

brush.fillRect(0, 0, width - 1, height - 1);

brush.drawRect(0, 0, width - 1, height - 1);

// 写入验证码

brush.setColor(this.getColor());

brush.setFont(new Font("Times New Roman", Font.ITALIC, 28));

brush.drawString(code, 7, 22);

// 绘制干扰线条

// 图片画完,关闭资源

brush.dispose();

return img;

}

/**

* 获取随机颜色

*

* @return Color

*/

private Color getColor() {

Random random = new Random();

int r = random.nextInt(255);

int g = random.nextInt(255);

int b = random.nextInt(255);

return new Color(r, g, b);

}

/**

* 将图片放入输入流中

*

* @param image

* @return InputStream

*/

private InputStream putImgInStream(BufferedImage image) {

ByteArrayOutputStream out = new ByteArrayOutputStream();

try {

ImageIO.write(image, "JPEG", out);

} catch (IOException e) {

e.printStackTrace();

}

InputStream in = new ByteArrayInputStream(out.toByteArray());

return in;

}

}

三、输出验证码

创建DemoServlet.java

package com.demo.vcode;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void init(ServletConfig config) throws ServletException {

}

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws IOException, ServletException {

res.setContentType("image/png");

Vcode vcode = new Vcode();

VcodeObject vcodeObject = vcode.create();

InputStream in = vcodeObject.getIn();

req.getSession().setAttribute("vcode", vcodeObject.getCode());

byte[] bytes = new byte[1024];

int length = 0;

try {

OutputStream out = res.getOutputStream();

while ((length = in.read(bytes)) != -1) {

out.write(bytes, 0, length);

}

in.close();

out.flush();

} catch (Exception e) {

}

}

public void doPost(HttpServletRequest req, HttpServletResponse resp)

throws IOException, ServletException {

}

public void destroy() {

}

}

配置web.xml

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

vcode

vcode

com.demo.vcode.DemoServlet

vcode

/vcode

浏览器地址栏访问

http://127.0.0.1:8080/vcode/vcode

java登录的 验证码_java登录验证码相关推荐

  1. java 3d验证码_Java实现验证码具体代码(图片、汉字)

    本文为大家分享两个实例,相信大家一定会喜欢. 实例1:随机生成验证码图片并将之输出为一个png文件 效果图: import java.awt.Color; import java.awt.Font; ...

  2. java验证码验证码_Java登录页面实时验证用户名密码和动态验证码

    ●登录名和密码是同时验证的,并不是先验证登录名是否存在,然后再验证密码是否正确,是同时进行验证,若登录名和密码当中一个条件不符合,则提示用户登录名或者密码错误, 这样做的意义是为了保证用户信息的安全( ...

  3. java http验证码_Java 云片验证码短信发送

    1.获取云片APIKEY 登录云片官网:www.yunpian.com 获取APIKEY 2.查看API文档 官网首页 进入API文档页面 短信分类.png 3.java配置 配置文件中添加 capt ...

  4. java 生成校验验证码_java生成验证码并进行验证

    一实现思路使用BufferedImage用于在内存中存储生成的验证码图片使用Graphics来进行验证码图片的绘制,并将绘制在图片上的验证码存放到session中用于后续验证 最后通过ImageIO将 ...

  5. java登陆界面背景_Java登录界面的实现(注册、登录、背景图片)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.java * 作者:常轩 * 微信公众号:Worldh ...

  6. java 图形界面 登陆_java登录图形界面

    编写程序,利用JtextField和JpasswordField分别接收用户输入的用户名和密码,并对用户输入的密码进行检验.对于每个用户名有三次密码输入机会. package beizi; impor ...

  7. java图形验证码_java图形验证码实现

    今天来学习下图形验证码的生成,首先依赖开源组件: com.github.penggle kaptcha 2.3.2 在web.xml中配置名为Kaptcha的servlet: Kaptcha com. ...

  8. java实现空心验证码_Java实现验证码

    public void getYZM(HttpServletRequest request, HttpServletResponse response){ //验证码图片宽度 final int IM ...

  9. java 登录验证码_java jsp实现登录验证码

    java jsp实现登录验证码 工作中使用的java jsp实现的登录验证码.代码记录如下: 1.登录主页面(login.jsp) pageEncoding="UTF-8"%> ...

最新文章

  1. 2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)
  2. scrum看板工具做问题跟踪
  3. vs2013突然没有代码提示功能了。
  4. Android ADB被占用 重启 ADB方法
  5. python自动化测试数据驱动_Python 自动化测试(四):数据驱动
  6. iphone7配置_西安苹果售后维修教您iphone7发热严重、耗电快怎么解决?
  7. 怎么在Mac上安装Tomcat 7
  8. 腾讯视频手机app下载安装_腾讯视频怎么签到
  9. Laravel 指定日志生成目录
  10. java多个条件排序_java定制化排序,多个条件排序
  11. 普通话测试第四题评分标准_2017年普通话考试-评分细则
  12. (十六)java版b2b2c社交电商spring cloud分布式微服务-用restTemplate消费服务
  13. SQL Server 2008 R2安装
  14. 13 个 Python 必备的知识,建议收藏!
  15. 清华计算机学院博士后,清华大学博士后
  16. 不能不用也不可乱用的标准化和归一化处理
  17. android m是什么版本号,Android m是什么版本
  18. OpenCV开发笔记(四十八):红胖子8分钟带你深入了解直方图均衡化(图文并茂+浅显易懂+程序源码)
  19. 淘宝商品详情页API接口、淘宝商品销量API接口、淘宝商品列表API接口、淘宝APP详情API接口、淘宝详情API接口
  20. 【无标题】vue -解决“You may use specia I comments to disa some warnings. ble Use//eslint-disable-next-line

热门文章

  1. 安装deepin系统步骤
  2. 给定圆的半径r,求圆的面积。
  3. python笔试知识点_python知识点及面试面试大集合
  4. Linux内核源码行数,Linux源代码已超过1000万行 价值达5亿美金
  5. 详解Vue.use使用与原理
  6. Java黑皮书课后题第8章:*8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序。这个方法首先按行排序,然后按列排序
  7. 【2012百度之星/初赛上】A:度度熊就是要第一个出场
  8. 通过zookeeper连接hive beeline
  9. # EXP8 Web基础
  10. 网站如何从http升级成https