使用Java手撸一个生成图片验证码的功能

使用Java手撸一个生成图片验证码的功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

江油网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联公司从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

具体内容如下

1、首先新建一各专门生成验证码图片的类VerifyCode:

public class VerifyCode {


private int w=70;
private int h=35;
private Random r=new Random();
//宋体,华文楷书,黑体,华文新魏,华文隶书,微软雅黑,楷体_GB2312,Times New Roman
private String [] fontNames={"宋体","华文楷书","黑体","华文新魏","微软雅黑","华文隶书","楷体_GB2312","Times New Roman"};
//可选的字符
private String codes="23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
//背景色
private Color bgColor=new Color(255,255,255);
//验证码上的文本
private String text;

//生成随机颜色
private Color randomColor(){
 int red=r.nextInt(150);
 int green=r.nextInt(150);
 int blue=r.nextInt(150);
 return new Color(red,green,blue);
}

//生成随机字体
private Font randomFont(){
int index=r.nextInt(fontNames.length);//获取下标
String fontName=fontNames[index];//生成随机的字体名称
int style=r.nextInt(4);//获取随机样式,0表示无样式,1表示粗体,2表示斜体,3表示粗体加斜体
int size=r.nextInt(5)+24;//生成随机字号,24~28
return new Font(fontName,style,size);
}

//画干扰线
private void drawLine(BufferedImage image){
int num=3;//一共画3条
Graphics2D g2=(Graphics2D) image.getGraphics();
for(int i=0;i

2、在jsp页面上应用:

其核心代码如下:

用户名:
密 码:
验证码: 看不清换一张

看不清换一张使用javascript实现,代码如下:

   

 +new Date().getTime()这条语句可以欺骗浏览器,以为请求是新的,实现验证码的改变。

3、在第2步中,VerifyCodeServlet的实现生成一张验证码,并且通过session域保存验证码图片对应的文本内容,为后面的登录验证验证码是否正确做准备。核心代码如下:

public class VerifyCodeServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


/*
* 1.生成图片
* 2.保存图片上的文本到session域中
* 3.把图片响应给客户端
*/
VerifyCode vc=new VerifyCode();
BufferedImage image=vc.getImage();
//保存图片上的文本到session域
request.getSession().setAttribute("session_code", vc.getText());

VerifyCode.output(image, response.getOutputStream());

  }
}

4、最后一步,实现登录验证验证码是否正确,其核心代码如下:

public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


/*
* 校验验证码
* 1.从session中获取正取的验证码
* 2.从表单中获取用户填写的验证码
* 3.进行比较
* 4.如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp
*/
String sessionCode=(String)                    

 request.getSession().getAttribute("session_code");//获得的验证码里面对应的文本内容
String paramCode=request.getParameter("verifyCode");//用户输入文本框里面的内容
if(!paramCode.equalsIgnoreCase(sessionCode)){
request.setAttribute("msg", "验证码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);//打回到登录界面。
return;//返回,不继续执行下面的语句。
}
}
}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


文章标题:使用Java手撸一个生成图片验证码的功能
分享地址:http://csdahua.cn/article/ispdsh.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流