验证码

xiaoxiao2021-03-01  16

package org.cric.util; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.awt.*; import java.awt.image.*; import java.util.*; import javax.imageio.*; public class AuthImg extends HttpServlet { private static final long serialVersionUID = 1L; //设置字体 private Font mFont = new Font("Arial Black", Font.PLAIN, 16); public void init() throws ServletException { super.init(); } /** * 生成随机颜色 * @param fc 产生颜色值下限(lower limit) * @param bc 产生颜色值上限(upper limit) * @return 生成的随机颜色对象 */ 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); } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); int width = 100, height = 18; //生成画布 BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); //获取图形上下文 (生成画笔) Graphics g = image.getGraphics(); Random random = new Random(); //设置背景色() g.setColor(getRandColor(200, 250)); //填充矩形区域 ,作为背景 g.fillRect(1, 1, width - 1, height - 1); //设置边框颜色 g.setColor(new Color(102, 102, 102)); g.drawRect(0, 0, width - 1, height - 1); g.setFont(mFont); //设置随机干扰线条颜色 g.setColor(getRandColor(160, 200)); //产生155条干扰线条 for (int i = 0; i < 155; i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g.drawLine(x, y, x + xl, y + yl); } for (int i = 0; i < 70; i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(12) + 1; int yl = random.nextInt(6) + 1; g.drawLine(x, y, x - xl, y - yl); } String sRand = ""; for (int i = 0; i < 6; i++) { String tmp = getRandomChar(); sRand += tmp; g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); g.drawString(tmp, 15 * i + 10, 15); } HttpSession session = request.getSession(true); session.setAttribute("rand", sRand); g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream()); } private String getRandomChar() { //int rand = (int) Math.round(Math.random() * 2); long itmp = 0; /*char ctmp = '\u0000'; switch (rand) { case 1: itmp = Math.round(Math.random() * 25 + 65); ctmp = (char) itmp; return String.valueOf(ctmp); case 2: itmp = Math.round(Math.random() * 25 + 97); ctmp = (char) itmp; return String.valueOf(ctmp); default:*/ itmp = Math.round(Math.random() * 9); return String.valueOf(itmp); //} } }

 

 

 

因为AuthImg继承HttpServlet类

所以要web.xml 文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>struts2_bar</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>authImg</servlet-name> <servlet-class>org.cric.util.AuthImg</servlet-class> </servlet> <servlet-mapping> <servlet-name>authImg</servlet-name> <url-pattern>/authImg</url-pattern> </servlet-mapping> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> </web-app>

 

 前台代码

<img src="authImg" />

 

<a href='javascript:;'  id="changeImg">看不清?</a>

 

 

$(document).ready(function(){ $("#changeImg").live("click",function(){ $("img").attr("src","authImg?now="+new Date()); }); })

 

转载请注明原文地址: https://www.6miu.com/read-4150214.html

最新回复(0)