java实现验证码

根据别人的代码稍稍修改了,实现在web页面展示
原帖地址:https://www.cnblogs.com/thirt...
生成验证码代码:

package com.tao.demo.utils;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
public class SecurityUtil {
    
    private BufferedImage image;// 图像  
private String str;// 验证码  
private static char code[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".toCharArray();  
    public static final String SESSION_CODE_NAME="code";  
    private SecurityUtil() {  
        init();// 初始化属性  
}  
    /* 
* 取得RandomNumUtil实例      */  
public static SecurityUtil Instance() {  
        return new SecurityUtil();  
    }  
    
    /* 
* 取得验证码图片      */  
public BufferedImage getImage() {  
        return this.image;  
    }  
    
    /* 
* 取得图片的验证码      */  
public String getString() {  
        return this.str;  
    }  
    
    private void init() {  
        // 在内存中创建图象  
int width = 85, height = 20;  
        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(0, 0, width, height);  
        // 设定字体  
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));  
        // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到  
g.setColor(getRandColor(160, 200));  
        for (int i = 0; i < 155; i++) {  
            int x = random.nextInt(width);  
            int y = random.nextInt(height);  
            int xl = random.nextInt(12);  
            int yl = random.nextInt(12);  
            g.drawLine(x, y, x + xl, y + yl);  
        }  
        // 取随机产生的认证码(4位数字)
 StringBuffer sRand = new StringBuffer();
        for (int i = 0; i < 4; i++) {  
            String rand = String.valueOf(code[random.nextInt(code.length)]);
            sRand.append(rand);
//            sRand += rand;
 // 将认证码显示到图象中  
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));  
            // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
 g.drawString(rand, 13 * i + 6, 16);
        }  
        // 赋值验证码  
this.str = sRand.toString().toLowerCase();
    
        // 图象生效  
g.dispose();  
        this.image = image;/* 赋值图像 */}  
    
    /* 
* 给定范围获得随机颜色      */  
private 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);  
    }  
}

Controller

package com.tao.demo.controller;
import com.tao.demo.utils.SecurityUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @Author tao
 * @Date 2020/10/27 4:02 下午
 * @Version 1.0
 */@Controller
public class Demo {
    @RequestMapping(value = "/getSecurityCode")
    public void getSecurityCode(HttpServletResponse response, HttpServletRequest request){
        // 通知浏览器不要缓存
 response.setHeader("Expires", "-1");
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "-1");
        SecurityUtil util = SecurityUtil.Instance();
        // 将验证码输入到session中,用来验证
 String code = util.getString();
        request.getSession().setAttribute("code", code);
        // 输出打web页面
 try {
            ImageIO.write(util.getImage(), "jpg", response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @GetMapping("index")
    public String index(){
        return "index";
    }
    @ResponseBody
 @GetMapping("/submit")
    public String submit(String inputCode,HttpServletRequest request){
        String code = (String) request.getSession().getAttribute("code").toString().toLowerCase();
        System.out.println("code:"+code);
        System.out.println("inputCode:"+inputCode);
        if (code.equals(inputCode)){
            return "验证码正确";
        }
        return "验证码错误";
    }
}

前端页面




    
    Title



请输入验证码:

java实现验证码_第1张图片

你可能感兴趣的:(java,验证码)