注册模块以及安全攻防--图形验证码模块

本文档介绍了如何在高并发环境中确保邮箱唯一性,并防止恶意调用注册时的手机或邮箱验证码。通过引入Kaptcha框架,配置图形验证码的生成,并在User模块中进行集成,以增强系统的安全性。同时,详细展示了配置类CaptchaConfig的实现和NotifyController中获取验证码的方法。
摘要由CSDN通过智能技术生成

需求:用户通过手机号或者邮箱注册---获取验证码-----填写密码等----数据库存储信息

安全性:高并发下邮箱唯一性

               注册邮箱和手机验证码不能被恶意调用

             头像文件存储访问方便管理和扩容

利用谷歌的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();
                }
            }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero _s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值