content: package com.ctg.test.controller;
  
  import com.ctg.test.util.ImageCode;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.social.connect.web.HttpSessionSessionStrategy;
  import org.springframework.social.connect.web.SessionStrategy;
  import org.springframework.web.bind.annotation.GetMapping;
  import org.springframework.web.bind.annotation.RestController;
  import org.springframework.web.context.request.ServletWebRequest;
  
  import javax.imageio.ImageIO;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import java.awt.*;
  import java.awt.image.BufferedImage;
  import java.io.IOException;
  import java.util.Random;
  
  /**
   * @Description: 生成校验码
   * @Author: yanhonghai
   * @Date: 2019/4/13 15:46
   */
  
  @RestController
  public class ImageCodeController {
  
      public static final String SESSION_KEY = "SESSION_KEY_IMAGE_CODE";
      private static final Logger logger = LoggerFactory.getLogger(ImageCodeController.class);
      private SessionStrategy sessionStrategy = new HttpSessionSessionStrategy();
  
      @GetMapping("/createImageCode")
      public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
          ImageCode imageCode = createImage(request);
          sessionStrategy.setAttribute(new ServletWebRequest(request), SESSION_KEY, imageCode);
          logger.info("createImageCode:{}", imageCode.getCode());
          ImageIO.write(imageCode.getImage(), "JPEG", response.getOutputStream());
      }
  
      private ImageCode createImage(HttpServletRequest request) {
          int width = 67;
          int height = 23;
          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.ITALIC, 20));
          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);
          }
  
          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);
          }
  
          g.dispose();
  
          // 有效期
          return new ImageCode(image, sRand, 60);
      }
  
      /**
       * 生成随机背景条纹
       *
       * @param fc
       * @param bc
       * @return
       */
      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);
      }
  }
  
  