package com.xzx.gc.role.controller; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.xzx.gc.common.annotations.PassToken; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.request.BaseController; import com.xzx.gc.common.utils.RedisUtil; import com.xzx.gc.util.DoubleUtil; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.imageio.ImageIO; 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.HashMap; import java.util.Map; import java.util.Random; import static com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage; @RestController @Api(tags = "登陆和用户管理的接口(验证码)") @Slf4j public class VerifyController extends BaseController { @RequestMapping(Constants.ADMIN_VIEW_PREFIX+"/wxImgApi") @PassToken public void wxImgApi(HttpServletRequest req, HttpServletResponse resp) throws IOException { String content = req.getParameter("content"); if(StringUtils.isBlank(content)){ return; } MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); Map hints = new HashMap(); BitMatrix bitMatrix = null; try { bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400,hints); BufferedImage image = toBufferedImage(bitMatrix); //输出二维码图片流 try { ImageIO.write(image, "png", resp.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } catch (WriterException e1) { e1.printStackTrace(); } } @RequestMapping(Constants.ADMIN_VIEW_PREFIX +"/verifyApi") @PassToken public void verifyApi(HttpServletRequest req, HttpServletResponse resp) throws IOException { // 创建图片 int width = 80; int height = 40; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 创建图层获得画板 Graphics g = image.getGraphics(); // 确认画笔颜色 g.setColor(Color.BLACK); //填充矩形 g.fillRect(0, 0, width - 2, height - 2); // String dataString="ABCDEFGHIJHLMNOPQRSTUVWXYZabcdefghijklmnopqlstuvwxyz1234567890"; String dataString = "1234567890"; //设置字体 g.setFont(new Font("宋体", Font.BOLD, 30)); //缓存随机生成的字符 StringBuffer buf = new StringBuffer(); Random random = new Random(); String password= DoubleUtil.getLowerLetterNumber(4); //截取字符 int index = 1; for (int i = 0; i < 4; i++) { //设置字体颜色 随机 g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255))); //获得一个随机字符 //int index = random.nextInt(10); String str = password.substring(i, index); //String str = dataString.substring(index, index + 1); //加入画板 g.drawString(str, 20 * i, 30); buf.append(str); index++; } //干扰线 for (int i = 0; i < 10; i++) { g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255))); g.setColor(new Color(16, 16, 16)); g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height)); } HttpSession session = req.getSession(); log.debug("获取的验证码是: {}", buf.toString()); session.setAttribute("cap", buf.toString()); //设置响应类型 resp.setContentType("image/jpeg"); //将图片发送给浏览器 ImageIO.write(image, "jpg", resp.getOutputStream()); } }