一、验证码生成功能
-
成果:
-
可以看出这个验证码主要是:这个图片的展示
代码位置
com.ruoyi.web.controller.common.CaptchaController
@RestController
public class CaptchaController
{
@Resource(name = "captchaProducer")
private Producer captchaProducer;//验证码制作者
@Resource(name = "captchaProducerMath")
private Producer captchaProducerMath;//制作 数学计算 的验证码
@Autowired
private RedisCache redisCache;//redis缓存
// 验证码类型
@Value("${ruoyi.captchaType}")
private String captchaType;//验证码类型
@Autowired
private ISysConfigService configService;//就用于判断验证码开关
/**
* 生成验证码
*/
@GetMapping("/captchaImage")
public AjaxResult getCode(HttpServletResponse response) throws IOException
{
AjaxResult ajax = AjaxResult.success();//定义成功的返回结果
boolean captchaOnOff = configService.selectCaptchaOnOff();//获取验证码开关
ajax.put("captchaOnOff", captchaOnOff);
if (!captchaOnOff)//开关:关着,直接返回
{
return ajax;
}
// 保存验证码信息
String uuid = IdUtils.simpleUUID();//生成随机四位数
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;//验证密匙===验证码 redis key + uuid
String capStr = null, code = null;
BufferedImage image = null;//缓冲图像
// 生成验证码
if ("math".equals(captchaType))
{
String capText = captchaProducerMath.createText();//谷歌的验证码文本创建(展示问题@结果)9+8=?@17
capStr = capText.substring(0, capText.lastIndexOf("@"));//问题
code = capText.substring(capText.lastIndexOf("@") + 1);//结果
image = captchaProducerMath.createImage(capStr);//根据问题创建图片