首页 > 编程知识 正文

java识别复杂验证码,Java实现验证码制作

时间:2023-05-03 08:44:00 阅读:151720 作者:2338

基于IntelliJ IDEA的网页生成认证码相关模块:

import com.sun.image.codec.JPEG.JPEG codec; import com.sun.image.codec.JPEG.jpegimageencoder; import java.awt.*; import Java.awt.image.buffered image; import Java.io.bytearray inputstream; import Java.io.bytearray output stream; importjava.io.IOException; importjava.io.InputStream; importjava.util.HashMap; importjava.util.Map; importjava.util.Random; publicfinalclassimageutil { privatestaticfinalchar [ ] chars={‘0’、‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’ private static final int LINES=5; private static final int WIDTH=80; private static final int HEIGHT=40; privatestaticfinalintfont _ size=30; 公共静态映射创建映像(

StringBuffer sb=newStringBuffer (;

bufferedimageimage=newbufferedimage (width,HEIGHT,

BufferedImage.TYPE_INT_RGB;

graphics graphic=image.get graphics (;

graphic.setcolor (color.light _ gray;

graphic.fillrect (0,0,WIDTH,HEIGHT );

Random ran=newRandom (; for(intI=1; i=SIZE; I ) intr=ran.nextint(chars.length );

graphic.setcolor (getrandom color ) );

Graphic.setfont(newfont(null,Font.BOLD Font.ITALIC,FONT_SIZE ) );

Graphic.Drawstring(chars[r] ',(i - 1 ) * WIDTH /SIZE,

HEIGHT/2;

sb.append(chars[r];

}for(intI=1; i=LINES I ) {

graphic.setcolor (getrandom color ) );

graphic.drawline (ran.nextint (width ),ran.nextint ) height )、

ran.nextint(width )、ran.nextint (height );

}

映射图=new hashmap (;

map.put(sb.tostring )、image ); 返回映射;

} publicstaticcolorgetrandomcolor {

Random ran=newRandom (;

color color=new color (ran.nextint (256 )、ran.nextint (256 ) )、

ran.nextint(256 ); 返回颜色;

} publicstaticinputstreamgetinputstream (bufferedimageimage ) throwsIOException {

bytearrayoutputstreambos=newbytearrayoutputstream (;

jpegimageencoderencoder=JPEG codec.createjpegencoder (Bos;

encoder.encode(image; byte[] imageBts=bos.toByteArray (;

inputstream in=newbytearrayinputstream (image BTS ); returnin;

}

}

生成认证码ImageUtill类

/***为登录页面生成认证码*/@ request mapping (/create image.do ) (public voidcreateImage ) ) ) ) ) ) ) )的验证代码

HttpServletResponse response,http session session } throws exception {

map image map=image util.create image (;

String code=imageMap.keySet ().iterator ) ).next );

session.set attribute (' image code ',code );

bufferedimageimage=image map.get (code;

response.set content type (image/JPEG );

output stream ops=response.get output stream (;

imageio.write(image,' jpeg ',ops;

ops.close (;

}

JSP网页调用(片段,将上面的ceateImage.do放入src ) :

验证码:程序没错!

可以编写Java程序来验证图像的生成。

但是,网页无法显示验证码的图像。 虽然无法将错误消息写入Tomcat的temp目录,但temp目录一定存在,因为必须具有管理员权限才能写入temp目录。

解决方法:

进入tomcat安装目录c :program filesapachesoftwarefoundationTomcat 8.5

右键单击temp属性:

检查所有用户的所有权限,解决问题!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。