首页>代码>ssm+shiro+layui+easyui实现的后台权限管理系统>/RMS/src/main/java/SystemManage/Common/controller/ImageCodeController.java
package SystemManage.Common.controller;

import SystemManage.Common.entity.Result;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

/**
 * 生成/获取验证码
 */
@Controller
@RequestMapping("imageCode")
public class ImageCodeController {
    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);
    }

    @RequestMapping(value = "/showCode", method = RequestMethod.GET)
    public void outputImage(HttpServletRequest request, HttpServletResponse response,HttpSession session)
    {
        //设置页面不缓存
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        // 在内存中创建图象
        int width = 60, 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));

        //画边框
        //g.setColor(new Color());
        //g.drawRect(0,0,width-1,height-1);

        // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
        g.setColor(getRandColor(160, 200));
        for (int i = 0; i < 100; 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位数字)
        String sRand = "";
        for (int i = 0; i < 4; i++) {
            String rand = String.valueOf(random.nextInt(10));
            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);
        }

        // 将认证码存入SESSION
        session.setAttribute("code", sRand);
        // 图象生效
        g.dispose();

        // 输出图象到页面
        try {
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
            encoder.encode(image);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    /*获取验证码*/
    @RequestMapping(value = "/getCode", method = RequestMethod.POST)
    public Result getRandCode(HttpSession session)
    {
        Result result = new Result();
        Object obj= session.getAttribute("code");
        result.setObj(obj);
        return result ;
    }
}
最近下载更多
泓鼎168  LV20 5月15日
xuweiwowzy  LV5 2月24日
wz520135  LV7 2022年11月5日
猜猜21  LV13 2022年6月10日
ssh123  LV10 2022年3月18日
Start1  LV15 2022年3月10日
wanglinddad  LV55 2022年3月1日
543666826  LV33 2021年11月20日
zy15587462022  LV8 2021年10月27日
ericxu1116  LV24 2021年7月8日
最近浏览更多
zhengguangshun  LV4 8月25日
李朝磊  LV18 6月24日
ma406805131  LV15 6月2日
shuiyan  LV1 6月1日
泓鼎168  LV20 5月15日
yhe107  LV3 4月17日
xuweiwowzy  LV5 2月24日
做自己的太阳  LV11 2月1日
qq1581551433 1月9日
暂无贡献等级
WBelong  LV8 2023年12月26日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友