Html:

 <input id="verifyCode" name="verifyCode" type="text"
value="" onclick="JavaScript:this.value=''" /></span><cite><img id="imageCode" alt="验证码" src="<%=request.getContextPath()%>/getCodeImage.do" onclick="resetCode()"></cite>

Java:

 package cn.hk.base.action;

 import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random; import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import cn.zy.action.BaseAction; @Controller
public class CommonAction extends BaseAction{ /**
*
*/
private static final long serialVersionUID = -8902195523837272079L; /**
* 验证图片宽
*/
private static final int WIDTH = 114;
/**
* 验证图片高度
*/
private static final int HEIGHT = 46; @RequestMapping("/getCodeImage.do")
public @ResponseBody void getCodeImage(HttpServletRequest request,HttpServletResponse response) throws IOException{
// 获得图片
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);
// 获取画笔
Graphics g = image.getGraphics();
// 设置边框
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.WHITE);
g.fillRect(1, 1, WIDTH - 2, HEIGHT - 2);
/* // 设置背景
g.setColor(Color.getColor("#68B71A"));
g.drawRect(1, 1, WIDTH-2, HEIGHT-2);*/
// 干扰线
g.setColor(Color.GREEN);
int x1, y1;
int x2, y2;
Random r = new Random();
for (int i = 0; i < 10; i++) {
// 起始xy
x1 = r.nextInt(WIDTH);
y1 = r.nextInt(HEIGHT);
// 结束xy
x2 = r.nextInt(WIDTH);
y2 = r.nextInt(HEIGHT); g.drawLine(x1, y1, x2, y2);
}
// 验证码
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));
String base = "qwertyupasdfghjkzxcvbnm23456789QWERTYUIOPASDFGHJKLZXCVBNM";
StringBuilder sb = new StringBuilder();
char ch = '\u0000';
int degree = 0;
r = new Random();
int startX = 8;
for (int i = 0; i < 4; i++) {
ch = base.charAt(r.nextInt(base.length())); // 设置旋转, ±20°
degree = r.nextInt() % 20;
((Graphics2D) g).rotate(degree * Math.PI / 180, startX, 14);
g.drawString(ch + "", startX, 26);
// 取消旋转
((Graphics2D) g).rotate(-degree * Math.PI / 180, startX, 14); startX += 24;
sb.append(ch);
}
request.getSession().setAttribute("checkCode", sb.toString().toLowerCase());
// 发送给页面
response.setContentType("image/jpeg");
response.setDateHeader("expries", -1);
response.setHeader("cache-control", "no-cache");
response.setHeader("progma", "no-cache");
ImageIO.write(image, "jpg", response.getOutputStream()); }
}

【Java】登录验证码的更多相关文章

  1. java登录验证码 用到spring框架

    转载:https://blog.csdn.net/zqd_java/article/details/53638143 在次大神基础上添加下述js代码即可使用了. //登陆验证 function cha ...

  2. Java中SSM+Shiro系统登录验证码的实现方法

    1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...

  3. Java实现登录验证码

    登录验证码 Servlet /* 从请求中获取数据,获取验证码的session的值转为String类型,       销毁,防止返回后验证码不刷新,重新验证成功       判断验证码是否相同(忽略大 ...

  4. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  5. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

  6. 登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

  7. java图形验证码

    用java实现验证码的生成,以下代码是一个controller,可以直接使用 package org.jxnd.tongxuelu.controller; import java.awt.Color; ...

  8. java实现验证码功能

    java实现验证码功能 通过java代码实现验证码功能的一般思路: 一.通过java代码生成一张验证码的图片,将验证码的图片保存到项目中的指定文件中去,代码如下: package com.util; ...

  9. 工作笔记5.JAVA图片验证码

    本文主要内容为:利用JAVA图片制作验证码. 设计思路: 1.拷贝AuthImageServlet.class图片验证码 2.配置web.xml 3.JSP中,调用封装好的AuthImageServl ...

  10. java生成图片验证码(转)--封装生成图片验证码的工具类

    博客部分内容转载自 LonlySnow的博客:后台java 实现验证码生成 1.controller方法 @RequestMapping(value = "/verifycode/img&q ...

随机推荐

  1. codeforces 828 D. High Load(思维,水题)

    题目链接:http://codeforces.com/contest/828/problem/D 题解:任意去一个点为根然后有几个k就是几个子叶也就是根结点有几个分支然后最好的解法就是贪心,将剩下的点 ...

  2. codeforces 459 E. Pashmak and Graph(dp)

    题目链接:http://codeforces.com/contest/459/problem/E 题意:给出m条边n个点每条边都有权值问如果两边能够相连的条件是边权值是严格递增的话,最长能接几条边. ...

  3. Bytes类型

    Bytes类型 一.定义 bytes类型是指一堆字节的集合,在python中以b开头的字符串都是bytes类型. b'\xe5\xb0\x8f\xe7\x8c\xbf\xe5\x9c\x88' ''' ...

  4. poj1037 [CEOI 2002]A decorative fence 题解

    ---恢复内容开始--- 题意: t组数据,每组数据给出n个木棒,长度由1到n,除了两端的木棒外,每一根木棒,要么比它左右的两根都长,要么比它左右的两根都短.即要求构成的排列为波浪型.对符合要求的排列 ...

  5. yzoj1891 最优配对问题 题解

    题意 有n个点,且2|n,要求将其分为n/2对点对使得所有点对中距离之和尽量小 输出保留两位小数 考虑数据范围先想到的是搜索,然而搜索超时,我们发现在搜索的时候有重复搜索的情况,那么考虑记忆化,看到数 ...

  6. Winform中使用printDocument控件打印pictureBox中的二维码照片

    场景 Winform中使用zxing和Graphics实现自定义绘制二维码布局: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  7. 手机端特有的meta标签有哪些?

    3.1 meta 语法 定义和用法:name 属性把 content 属性连接到 name. 语法:name=author|description|keywords|generator|revised ...

  8. 基于 VMware 的超融合, 解析 vSAN 与 SmartX ZBS 的优劣差异

    在企业级IT领域从业多年,最近越来越多地听到圈内人谈论起超融合技术的种种好处.的确,超融合技术已越来越走向成熟,带来的价值也逐渐凸显.它可靠性高,资源消耗低,尤其是运维部署非常便捷.在企业基础架构领域 ...

  9. linux 操作系统级别监控 TOP命令

    Top命令是Linux下一个实时的.交互式的,对操作系统整体监控的命令,可以对CPU.内存.进程监控. 是Linux下最常用的监控命令. 第一行是任务队列信息 1 user 当前登录用户数load a ...

  10. CSS3动画animation认识,animate.css的使用

    CSS动画 可以取代js动画 在移动端会更加流畅! 下面是一个的绘制太阳系各大行星运行轨迹笔记,可以自学参考! -------------------------------------------- ...