hutool工具生成图片验证码

图片验证码

hutool工具生成图片验证码_第1张图片
hutool工具生成图片验证码_第2张图片

①、生成图片验证码

@Autowired
private ValidateCodeService validateCodeService;

@GetMapping(value="/generateValidateCode")
public Result<ValidateCodeVo> generateValidateCode(){
	ValidateCodeVo validateCodeVo = validateCodeService.generateValidateCode();
	return Result.build(validateCodeVo,ResultCodeEnum.SUCCESS);
}
@Service
public class ValidateCodeServiceImpl implements ValidateCodeService{
	
	@Autowried
	private RedisTemplate<String,String> redisTemplate;

	@Override
	public ValidateCodeVo generateValidateCode(){
		
		//依赖中的hutool-all
		//1.通过工具生成图片验证码(高,宽,验证码位数,干扰线数量)
		CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(150,48,4,20);
		String codeValue = circleCaptcha.getCode();//验证码值
		String imageBase64 = circleCaptcha.getImageBase64();//返回图片编码 
		
		//2.存储到redis
		String codeKey = UUID.randomUUID().toString().replace("-","");
		redisTemplate.opsForValue().set("user:login:validatecode:"+codeKey,codeValue,5,TimeUnit.MINUTES);
		
		//3.返回ValidateCodeVo对象
		ValidateCodeVo validateCodeVo = new ValidateCodeVo();
		validateCodeVo.setCodeKey(key);
		validateCodeVo.setCodeValue("data:image/png;base64," + imageBase64);
		
		return validateCodeVo;
	}
}
@Data
@Schema(description="验证码响应结果实体类")
public class ValidateCodeVo{
	
	@Schema(description="验证码key")
	private String codeKey;

	@Schema(description="验证码value")
	private String codeValue;
}

②、登录验证

public LoginVo login(LoginDto loginDto){
	
	String captcha = loginDto.getCaptcha();
	String key = loginDto.getCodeKey();

	String redisCode = redisTemplate.opsForValue().get("user:validate" + key);

	if(StrUtil.ieEmpty(redisCode) || !StrUtil.equalsIgnoreCase(redisCode,captcha)){
		throw new GuiguException(ResultCodeEnum.VALIDAECODE_ERROR);
	}

	redisTemplate.delete("user:validate" + key);

	String userName = loginDto.getUserName();
	SysUser sysUser = sysUserMapper.selectUserInfoByUserName(userName);
	
	//……
}

你可能感兴趣的:(hutool,工具,验证码图片)