java识别复杂验证码,Java实现验证码制作
基于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 files\apachesoftwarefoundation\Tomcat 8.5
右键单击temp属性:
检查所有用户的所有权限,解决问题!