package com.njcn.auth.controller; import cn.hutool.core.io.IoUtil; import com.google.code.kaptcha.Producer; import com.google.code.kaptcha.util.Config; import com.njcn.auth.utils.AuthPubUtil; import com.njcn.common.pojo.constant.SecurityConstants; import com.njcn.redis.utils.RedisUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import springfox.documentation.annotations.ApiIgnore; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Properties; /** * @author hongawen * @version 1.0.0 * @date 2021年06月04日 15:25 */ @Api(tags = "认证中心") @Slf4j @Controller @RequestMapping("/auth") @AllArgsConstructor public class KaptchaController { private final RedisUtil redisUtil; @ApiIgnore @ApiOperation("获取图形验证码") @GetMapping("/getImgCode") public void getImgCode(@ApiIgnore HttpServletResponse resp, @ApiIgnore HttpServletRequest request) { ServletOutputStream out = null; try { out = resp.getOutputStream(); // resp.setContentType("image/jpeg");"/pqs-auth/auth/getImgCode", if (null != out) { Properties props = new Properties(); Producer kaptchaProducer; ImageIO.setUseCache(false); props.put("kaptcha.border", "no"); props.put("kaptcha.textproducer.font.color", "black"); /*props.put("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");*/ /*props.put("kaptcha.noise.impl", "com.sso.utils.ComplexNoise");*/ props.put("kaptcha.textproducer.char.space", "5"); props.put("kaptcha.textproducer.char.length", "4"); Config config = new Config(props); kaptchaProducer = config.getProducerImpl(); //此处需要固定采用字母和数字混合 String capText = AuthPubUtil.getKaptchaText(4); String userAgent = request.getHeader(HttpHeaders.USER_AGENT); String ip = request.getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); String key = userAgent + ip; redisUtil.delete(key); redisUtil.saveByKeyWithExpire(key, capText, 30*60L); BufferedImage bi = kaptchaProducer.createImage(capText); ImageIO.write(bi, "jpg", out); out.flush(); } } catch (IOException ioException) { log.error("获取图形验证码异常,异常为:{}", ioException.toString()); } finally { IoUtil.close(out); } } }