java生成验证码

转载自   java生成验证码

源码:

package seed.lee.image;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class ImageServlet extends HttpServlet {private int imgWidth = 0;private int imgHeight = 0;private int codeCount = 0;private int x = 0;private int fontHeight;private int codeY;private String fontStyle;private static final long serialVersionUID = 128554012633034503L;/*** 初始化配置参数*/public void init() throws ServletException {// 从web.xml中获取初始信息// 宽度String strWidth = this.getInitParameter("imgWidth");// 高度String strHeight = this.getInitParameter("imgHeight");// 字符个数String strCodeCount = this.getInitParameter("codeCount");fontStyle = this.getInitParameter("fontStyle");// 将配置的信息转换成数值try {if (strWidth != null && strWidth.length() != 0) {imgWidth = Integer.parseInt(strWidth);}if (strHeight != null && strHeight.length() != 0) {imgHeight = Integer.parseInt(strHeight);}if (strCodeCount != null && strCodeCount.length() != 0) {codeCount = Integer.parseInt(strCodeCount);}} catch (NumberFormatException e) {e.printStackTrace();}x = imgWidth / (codeCount + 1);fontHeight = imgHeight - 2;codeY = imgHeight - 12;}/*** * @param request* @param response* @throws ServletException* @throws IOException*/protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {response.setContentType("image/jpeg");response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);HttpSession session = request.getSession();// 在内存中创建图象BufferedImage image = new BufferedImage(imgWidth, imgHeight,BufferedImage.TYPE_INT_RGB);// 获取图形上下文Graphics2D g = image.createGraphics();// 生成随机类Random random = new Random();// 设定背景色g.setColor(Color.WHITE);g.fillRect(0, 0, imgWidth, imgHeight);// 设定字体g.setFont(new Font(fontStyle, Font.PLAIN + Font.ITALIC, fontHeight));// 画边框g.setColor(new Color(55, 55, 12));g.drawRect(0, 0, imgWidth - 1, imgHeight - 1);// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 160; i++) {int x = random.nextInt(imgWidth);int y = random.nextInt(imgHeight);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// 取随机产生的认证码(4位数字)String sRand = "";int red = 0, green = 0, blue = 0;for (int i = 0; i < codeCount; i++) {red = random.nextInt(255);green = random.nextInt(255);blue = random.nextInt(255);int wordType = random.nextInt(3);char retWord = 0;switch (wordType) {case 0:retWord = this.getSingleNumberChar();break;case 1:retWord = this.getLowerOrUpperChar(0);break;case 2:retWord = this.getLowerOrUpperChar(1);break;}sRand += String.valueOf(retWord);g.setColor(new Color(red, green, blue));g.drawString(String.valueOf(retWord), (i) * x, codeY);}// 将认证码存入SESSIONsession.setAttribute("rand", sRand);// 图象生效g.dispose();ServletOutputStream responseOutputStream = response.getOutputStream();// 输出图象到页面ImageIO.write(image, "JPEG", responseOutputStream);// 以下关闭输入流!responseOutputStream.flush();responseOutputStream.close();}Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {processRequest(request, response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {processRequest(request, response);}private char getSingleNumberChar() {Random random = new Random();int numberResult = random.nextInt(10);int ret = numberResult + 48;return (char) ret;}private char getLowerOrUpperChar(int upper) {Random random = new Random();int numberResult = random.nextInt(26);int ret = 0;if (upper == 0) {// 小写ret = numberResult + 97;} else if (upper == 1) {// 大写ret = numberResult + 65;}return (char) ret;}}

配置(web.xml):

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>imageServlet</servlet-name><servlet-class>seed.lee.image.ImageServlet</servlet-class><init-param><!-- 图宽 --><param-name>imgWidth</param-name><param-value>200</param-value></init-param><init-param><!-- 图高 --><param-name>imgHeight</param-name><param-value>80</param-value></init-param><init-param><!-- 显示的字符数 --><param-name>codeCount</param-name><param-value>5</param-value></init-param><init-param><!-- 字体类型 --><param-name>fontStyle</param-name><param-value>Times New Roman</param-value></init-param></servlet><servlet-mapping><servlet-name>imageServlet</servlet-name><url-pattern>/imageServlet</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>
效果:


下载源码:http://u.115.com/file/dnacj1en


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 中文文档 第三章 原理(5)错误处理

原文&#xff1a;Error Handling作者&#xff1a;Steve Smith翻译&#xff1a;谢炀&#xff08;Kiler)校对&#xff1a;高嵩(jack2gs)、何镇汐 当你的ASP.NET应用发生错误的时候, 你可以采用本文所述的各种方法来处理这些问题。 配置错误处理页面 你在 Startup 类的 Configure(…

java面向对象高级分层实例_接口类

package bdqn.studentSys.Dao;import java.util.List;import bdqn.studentSys.entity.Student;/*** 学生表的接口* author Administrator**/ public interface StudentDao {//查询所有的学生public List<Student> getAllStudent();//修改学生信息public int UpdateStuden…

杀死进程

-- 杀死进程端口 netstat -aon|findstr "8086" taskkill /PID 9160 /f

菜鸟学Java(六)——简单验证码生成(Java版)

转载自 菜鸟学Java&#xff08;六&#xff09;——简单验证码生成(Java版)验证码大家都知道&#xff0c;它的作用也不用我多说了吧。如果不太清楚请参见百度百科中的解释&#xff0c;一般验证码的生成就是随机产生字符&#xff08;数字、字母或者汉字等&#xff09;&#xff0…

对象集合中如何用对象的某个属性给对象排序?

这是在工作中遇到的一个问题。用到的持久层技术是mybatis-plus&#xff0c;它里面自带的条件对象wrapper&#xff0c;我们可以通过wrapper.orderByDesc()或者wrapper.orderByAsc()给我们list中的对象排序。 但是问题来了&#xff0c;如果公司在基于这个框架的基础上写了一个通用…

你知道C#中的Lambda表达式的演化过程吗

那得从很久很久以前说起了&#xff0c;记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂。 委托的使用 例一&#xff1a; 什么是委托&#xff1f; 个人理解&#xff1a;用来传递方法的类型。&#xff08;用来传递数字的类型有int、float、double&#xff0c;用…

拦截第三方快递物流 ,console控制台打印正常 ,浏览器显示正常 ,传至后台乱码

使用 apache.http. 可以解决 压缩的json文件 浏览器会自动解压但我们的后台不会package com.zjyouth.utils;import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.…

java面向对象高级分层实例_数据库操作类

package bdqn.studentSys.Dao.impl; /**** 学生表的数据库操作类*/ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;import bdqn.studentSys.Dao.BaseDao; import bdqn.studentSys.Dao.StudentDao; import bdqn…

shiro-权限概述

一、什么是权限 权限管理&#xff0c;一般根据系统的安全设置或安全规则&#xff0c;用户可以且只能访问自己被授予的资源。只要有用户名和密码&#xff0c;就一定会存在权限。 二、权限分类 访问权限 作为一个使用者或是访问者&#xff0c;你能够被允许看到的那些资源。 数…

ASP.NET Core Kestrel 中使用 HTTPS (SSL)

在ASP.NET Core中&#xff0c;如果在Kestrel中想使用HTTPS对站点进行加密传输&#xff0c;可以按照如下方式 申请证书 这一步就不详细说了&#xff0c;有免费的和收费的&#xff0c;申请完成之后会给你一个*.pfx结尾的文件。 添加NuGet包 nuget中查找然后再程序中添加引用Micro…

idea

war 发布 war explord 开发

Java最小堆解决TopK问题

转载自 Java最小堆解决TopK问题 TopK问题是指从大量数据&#xff08;源数据&#xff09;中获取最大&#xff08;或最小&#xff09;的K个数据。 TopK问题是个很常见的问题&#xff1a;例如学校要从全校学生中找到成绩最高的500名学生&#xff0c;再例如某搜索引擎要统计每天…

Shiro-概述

一、什么是Shiro shiro是Apache旗下的一个开源框架&#xff0c;将软件系统的安全认证相关功能抽取出来&#xff0c;实现用户身份证&#xff0c;权限授权&#xff0c;加密&#xff0c;会话等功能&#xff0c;组成一个通用的安全认证框架。 二、特点 易于理解的java security …

ASP.NET Core 缓存技术 及 Nginx 缓存配置

前言 在Asp.Net Core Nginx部署一文中&#xff0c;主要是讲述的如何利用Nginx来实现应用程序的部署&#xff0c;使用Nginx来部署主要有两大好处&#xff0c;第一是利用Nginx的负载均衡功能&#xff0c;第二是使用Nginx的反向代理来降低我们后端应用程序的压力。那除了以上两点之…

localStorage、sessionStorage、Cookie的区别及用法

localStorage、sessionStorage、Cookie https://segmentfault.com/a/1190000012057010 localStorage、sessionStorage、Cookie的区别及用法 webstorage webstorage是本地存储&#xff0c;存储在客户端&#xff0c;包括localStorage和sessionStorage。 localStorage localSto…

shiro入门

一、身份认证 基本流程 流程如下&#xff1a; shiro把用户的数据封装成标识token&#xff0c;token一般封装着用户名&#xff0c;密码等信息使用Subject获取到封装着用户的数据标识tokenSubject将token交给SecurityManager&#xff0c;在SecurityManager安全中心中&#xff…

前后端分离开发模式下后端质量的保证 —— 单元测试

概述 在今天&#xff0c; 前后端分离已经是首选的一个开发模式。这对于后端团队来说其实是一个好消息&#xff0c;减轻任务并且更专注。在测试方面&#xff0c;就更加依赖于单元测试对于API以及后端业务逻辑的较验。当然单元测试并非在前后端分离流行之后才有&#xff0c;它很早…

查询近12个月的数据,没有数据的月份补零

可以有两种方法实现&#xff0c;一种是纯sql的方式&#xff0c;一种是sql和代码共用的形式 一、纯sql的形式 前半部分用于一个近12个月的表&#xff0c;然后再将查出来的数据和月份表相结合&#xff0c;就是想要的结果 select v.month,b.price price,ifnull(b.count,0) cou…

java图形验证码生成工具类

转载自 java图形验证码生成工具类生成验证码效果 ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileOutput…

.NET Core中的认证管理解析

0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目&#xff0c;已经准备好了用户注册、登录等很多页面&#xff0c;也可以使用AuthorizeAttribute进行各种权限管理&#xff0c;看起来似乎十分方便。不过生成的代码都替…