<!--验证码--> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency>
@Bean public DefaultKaptcha getDefaultKaptcha() { DefaultKaptcha captchaProducer = new DefaultKaptcha(); Properties properties = new Properties(); properties.setProperty("kaptcha.border", "yes"); properties.setProperty("kaptcha.border.color", "105,179,90"); properties.setProperty("kaptcha.textproducer.font.color", "blue"); properties.setProperty("kaptcha.image.width", "220"); properties.setProperty("kaptcha.image.height", "80"); properties.setProperty("kaptcha.textproducer.font.size", "40"); properties.setProperty("kaptcha.session.key", "code"); properties.setProperty("kaptcha.textproducer.char.length", "4"); properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅⿊"); Config config = new Config(properties); captchaProducer.setConfig(config); return captchaProducer; }
@Autowired private Producer captchaProducer; @PostMapping("/kaptcha") @ApiOperation("获取验证码") @Authenticated(false) public RestResult getKaptchaImage(@RequestBody KaptchaVO vo) throws Exception { StringUtils.isTrueReMsg(vo.getImei()==null,"参数不正确"); //⽣成验证码 String capText = captchaProducer.createText(); redisTemplate.opsForValue().set("imei-kaptcha:"+vo.getImei(),capText); //向客户端写出 BufferedImage bi = captchaProducer.createImage(capText); ByteArrayOutputStream stream = new ByteArrayOutputStream(); ImageIO.write(bi, "jpg", stream); String s = Base64.getEncoder().encodeToString(stream.toByteArray()); return RestResult.successData("data:image/jpg;base64,"+s); }
//获取⽣成的验证码 String verifyCodeExpected=null; Object o1 = redisTemplate.opsForValue().get("imei-kaptcha:" + request.getHeader("imei")); if(o1!=null){ verifyCodeExpected=o1.toString(); } String code = loginFormVO.getCode(); StringUtils.isTrueReMsg(code == null || !code.equals(verifyCodeExpected),"验证码错误");
说明:将生成的验证码存放在redis,生成验证码图片base64给前端展示,登录接口加上验证码参数,进行比对
搜索
复制