图片验证码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- Hutool 全部模块 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.37</version> <!-- 请根据需要选择版本 -->
</dependency>
@RequestMapping("/getCode")
public void getCode(HttpServletResponse response) {
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
response.setContentType("image/jpeg");
response.setHeader("Pragma", "No-cache");
try {
// 输出到页面
lineCaptcha.write(response.getOutputStream());
// 打印日志
log.info("生成的验证码:{}", lineCaptcha.getCode());
redisUtil.set("code", lineCaptcha.getCode(), 300);
// 关闭流
response.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}

前端点击图片带上时间戳

1
2
3
4
5
6
7
8
9
10
11
12
13
// 验证码 URL(带时间戳)
const codeUrl = ref('http://127.0.0.1:9005/user/getCode')

// 刷新验证码方法
const refreshCode = () => {
codeUrl.value = 'http://127.0.0.1:9005/user/getCode?time=' + new Date().getTime()
}
<el-form-item label="验证码">
<el-input v-model="loginForm.code" placeholder="请输入验证码" style="width: 70%;" />
<div>
<img class="codeImg" :src="codeUrl" id="codeImg" @click="refreshCode" alt="" />
</div>
</el-form-item>

短信验证码

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
1
2
3
4
5
6
7
8
aliyun:
# 用户的 key 在自己的阿里云账号中去创建 用户的时候会有这个
accessKeyId: LTAI5tH1qZov91QDnkjiWtmE
# 用户的密码 在自己的阿里云账号中去创建 用户的时候会有这个
accessKeySecret: trHdLcIPbYYQTucvj1swNzNyy4BKO3
# 地区代号 其他springboot也可以一直使用下面的值东西 不用修改
regionId: cn-beijing
private final SmsConfig smsConfig;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@RequestMapping("/sendSms")
public CommonResult<String> sendSms(@RequestBody String phoneNumber) {
log.info("接收到手机号: {}", phoneNumber);
// 生成随机验证码
String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
// 将验证码发送给用户
boolean success = sendVerificationCode(phoneNumber, code);
if (success) {
redisUtil.set("phoneCode", code, 300);
return CommonResultEnum.SUCCESS.setData("验证码发送成功");
} else {
return CommonResultEnum.ERROR.setData("验证码发送失败");
}
}
public boolean sendVerificationCode(String phoneNumber, String code) {
try {
SendSmsResponse response = smsConfig.sendSms(
phoneNumber,
"阿里云短信测试", // 阿里云短信签名
"SMS_154950909", // 阿里云短信模板代码
"{\"code\":\"" + code + "\"}" // 模板参数
);
log.info(response.getCode());
return "OK".equals(response.getCode());
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

邮箱验证码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!--邮件发送-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
mail:
host: smtp.qq.com
password: mmbupuaeyrildjeh
port: 465
properties:
mail:
smtp:
ssl:
enable: true
test-connection: true
username: 2535685121@qq.com
private final JavaMailSender javaMailSender;
@PostMapping("senderMail")
public String senderMail(@RequestParam String email) {
Random random = new Random();
int verificationCode = random.nextInt(899999) + 100000;

SimpleMailMessage message = new SimpleMailMessage();
// 发件人 你的邮箱
message.setFrom("2535685121@qq.com");
// 接收人 接收者邮箱
message.setTo(email);

//邮件标题
message.setSubject("springboot发邮件测试:");

//邮件内容
message.setText("尊敬的用户:你好,springboot邮箱测试,您的注册验证码为:"+verificationCode);

javaMailSender.send(message);

return "success";
}