需求:用户通过手机号或者邮箱注册---获取验证码-----填写密码等----数据库存储信息
安全性:高并发下邮箱唯一性
注册邮箱和手机验证码不能被恶意调用
头像文件存储访问方便管理和扩容
利用谷歌的kapcha框架做图形验证码工具。
需要将依赖加到聚合工程的总配置文件以及user模块中
<!--kaptcha 验证码依赖包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
注意: 任何框架只有有starter,就是跟springboot整合的框架,使用的时候就是配置对应的bean以及什么是配置类@configuration,纳入到ioc容器进行管理。
/**
* 使用图形验证码的配置类
* 用来生成图形验证码
通常使用这个模板然后在模板里面修改
*/
@Configuration
public class CaptchaConfig {
@Bean
@Qualifier("captchaProducer") // 用来给这个对象取一个别名
public DefaultKaptcha defaultKaptcha(){
DefaultKaptcha kaptcha = new DefaultKaptcha();
Properties properties = new Properties();
// properties.setProperty(Constants.KAPTCHA_BORDER, "yes");
// properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "220,220,220");
// properties.setProperty(Constants.KAPTCHA_TEXT PRODUCER_FONT_COLOR, "38,29,12");
// properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "147");
// properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "34");
// properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "25");
//properties.setProperty(Constants.KAPTCHA_SESSION_KEY, "code");
// 验证码是几个数字的
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
// properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Courier");
// 字体间隔
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE,"8");
// 干扰线颜色
// properties.setProperty(Constants.KAPTCHA_NOISE_COLOR, "white");
// 干扰实现类
properties.setProperty(Constants.KAPTCHA_NOISE_IMPL,"com.google.code.kaptcha.impl.NoNoise");
// 图片样式
properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL,"com.google.code.kaptcha.impl.WaterRipple");
// 验证码文字来源
properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING,"0123456789");
Config config = new Config(properties);
kaptcha.setConfig(config);
return kaptcha;
}
}
/**
* 测试生成验证码并通知
*/
@Api(tags = "通知模块")
@RestController
@RequestMapping("api/user/v1")
@Slf4j
public class NotifyController {
/**
* 注入验证码生成器
*/
@Autowired
private Producer captchaProducer;
@GetMapping("captcha")
@ApiOperation("获取图形验证码")
public void getCaptcha(HttpServletRequest request, HttpServletResponse response){
// 生成图形验证码的文字
String text = captchaProducer.createText();
log.info("图形验证码:{}",text);
// 获取图片格式的验证码
BufferedImage image = captchaProducer.createImage(text);
ServletOutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
ImageIO.write(image,"jpg",outputStream);
} catch (IOException e) {
log.error("获取图形验证码异常",e);
e.printStackTrace();
}finally {
try {
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}