@Controller
@RequestMapping("/PictureCheckCode")
public class ServletController { @RequestMapping
public void pictureGenerate( HttpServletRequest req, HttpServletResponse res ) {
try {
MakePicture mp=new MakePicture() ;
String str=mp.drawPicture(60, 20,res.getOutputStream() );
req.getSession().setAttribute("pic", str);
res.getOutputStream().print(str);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
<form th:action="@{/login}" method="post">
<div><label> User Name : <input type="text" name="username"/> </label></div>
<div><label> Password: <input type="password" name="password"/> </label></div>
<div><label> Verify: <img src="PictureCheckCode" onclick="this.src='PictureCheckCode?d='+new Date().getTime()"/> </label></div>
<div><input type="submit" value="Sign In"/></div>
</form>
package hello;

import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.util.Random;
import java.io.OutputStream;
import java.io.IOException;
public class MakePicture //产生识别验证图像
{
private char charTable[]={
'a','A','b','B','c','C','d','D' ,'e','E' ,
'f','F','g','G','h','H','i','I','j','J' ,
'0','1','2','3','4','5','6','7','8','9'
};
public String drawPicture(int width,int height,OutputStream os)
{
if(width<=0)
width=100 ;
if(height<=0)
height=60 ; 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(new Color(0x5265fd)) ;
g.drawRect(0, 0, width, height) ;
String str ="" ;
for(int x=0;x<4;x++)
{
str+=charTable[(int) (Math.random()*charTable.length)];
} g.drawString(str.substring(0, 1), 0, 15);
g.drawString(str.substring(1, 2), 15, 17);
g.drawString(str.substring(2, 3), 35, 19);
g.drawString(str.substring(3, 4), 50, 16);
Random rand=new Random() ;
for(int i=0;i<10;i++)
{
int x=rand.nextInt(width) ;
int y=rand.nextInt(height) ;
g.drawOval(x, y, 1, 1) ;
}
g.dispose() ;
try {
ImageIO.write(image, "JPEG",os) ;
} catch (IOException e) { e.printStackTrace();
return "" ;
} return str ;
}
}

  

Captcha生成及使用的更多相关文章

  1. captcha ~ 生成验证码图片

    验证码在我们的世界中可以保护我们的信息安全的一个保障之一 这就是生成验证码的代码     # 导报 from captcha.image import ImageCaptcha #验证码的包 from ...

  2. Captcha生成验证码,docker部署时问题

    https://blog.csdn.net/huofuman960209/article/details/100738712 Dockerfile FROM openjdk:8-jdk-alpine ...

  3. ecshop验证码

    <?php //仿制ecshop验证码(四位大写字母和数字.背景) //处理码值(四位大写字母和数字组成) //所有的可能的字符集合 $chars = 'ABCDEFGHIJKLMNOPQRST ...

  4. drf实现图片验证码功能

    一.背景 在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若 ...

  5. Yii验证码简单使用及

    控制器:(写了貌似也没用,未解决验证码位数:位数可改核心代码) public $layout = false;//隐藏导航 public function actions(){ return [ // ...

  6. laravel 添加验证码

    1.  安装依赖  composer require gregwar/captcha 2.使用 use Gregwar\Captcha\CaptchaBuilder; use DB; use Requ ...

  7. django 用户注册功能实现

    增加views的类 class RegisterView(View): def get(self, request): return render(request, 'register.html', ...

  8. tensorflow训练验证码识别模型

    tensorflow训练验证码识别模型的样本可以使用captcha生成,captcha在linux中的安装也很简单: pip install captcha 生成验证码: # -*- coding: ...

  9. beego框架(golang)学习验证码

    beego框架(golang)学习验证码 登录页面使用验证码 路由设置 /beego_admin_template/routers/router.go get请求页面, post验证用户名密码和验证码 ...

随机推荐

  1. 通用表表达式(Common Table Expression)

    问题:编写由基本的 SELECT/FROM/WHERE 类型的语句派生而来的复杂 SQL 语句. 方案1:编写在From子句内使用派生表(内联视图)的T-SQL查询语句. 方案2:使用视图 方案3:使 ...

  2. ubuntu下通过pip安装pyside

    首先安装相关库 sudo apt-get install build-essential git cmake libqt4-dev libphonon-dev python2.7-dev libxml ...

  3. libvirt虚拟系统如何增加usb设备

    之前干这些事情都是通过virt-manager来搞定的.不过由于这个图形界面不太方便,而且现在没法打开(具体原因不详,每次打开提示一些方法未实现什么的),所以试下用libvirt的命令virsh来搞定 ...

  4. Struts2在Action中访问WEB资源

    什么是WEB资源? 这里所说的WEB资源是指:HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API. 为什么需要访问WEB资 ...

  5. ocp 1Z0-051 71-105题解析

    71. Which arithmeticoperations can be performed on a column by using a SQL function that is builtint ...

  6. c语言函数的可选性自变量

    功能: 宏va_arg()用于给函数传递可变长度的参数列表. 首先,必须调用va_start() 传递有效的参数列表va_list和函数强制的第一个参数.第一个参数代表将要传递的参数的个数. 其次,调 ...

  7. hdu 4496 (并差集)

    题意:给出一个图,m条边,输出删除前i条边后该图的联通块的个数. 思路:刚开始想着是不是联通问题,后来看明白题意后知道,如果从最后一条边添加的话,答案就会出来了,就是并差集的操作. #include& ...

  8. C语言经典算法100例(一)

    C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的.更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础. ...

  9. MVC神韵---你想在哪解脱!(十二)

    追加一条电影信息 运行应用程序,在浏览器中输入“http://localhost:xx/Movies/Create”,在表单中输入一条电影信息,然后点击追加按钮,如图所示. 点击追加按钮进行提交,表单 ...

  10. UIButton的imageEdgeInsets 和 titleEdgeInsets

    我们知道,在UIButton中有一个UILabel和一个UIImageView,同时还有属性: titleEdgeInsets,imageEdgeInsets.介绍下 imageEdgeInsets ...