springboot3手机验证码
时间: 2024-12-31 15:32:59 浏览: 7
### 实现手机验证码功能
为了在 Spring Boot 3 中实现手机验证码功能,需完成几个主要部分的工作。这包括配置必要的 Maven 依赖项、设置属性文件中的相关配置以及开发用于生成和发送验证码的服务。
#### 添加Maven依赖
首先,在项目的 `pom.xml` 文件中加入如下依赖:
```xml
<dependencies>
<!-- 发送短信验证码 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 如果需要使用第三方服务提供商API,则可能还需要其他库 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>${dysmsapi.version}</version>
</dependency>
</dependencies>
```
上述代码片段展示了如何引入阿里云 SDK 来支持通过其 API 进行短信发送[^2]。
#### 配置application.properties 或 application.yml
接着,在应用程序的配置文件里定义与短信服务商有关的信息,比如访问密钥ID (AccessKeyId),秘密键(AccessKeySecret) 和签名名称(SignName):
对于 `application.properties`:
```properties
sms.accessKeyId=your-access-key-id
sms.secret=your-secret-key
sms.signName=YourSignName
sms.templateCode=SMS_123456789
```
对于 `application.yml` :
```yaml
sms:
accessKeyId: your-access-key-id
secret: your-secret-key
signName: YourSignName
templateCode: SMS_123456789
```
这些配置允许程序连接到指定的消息服务平台并调用相应的接口来发送消息。
#### 创建控制器和服务类
之后,编写一个 RESTful Web Service 接口用来接收客户端发起的请求,并触发向给定电话号码发送验证码的操作;同时也要有一个后台任务负责实际执行此操作。
##### 控制器示例 (`SmsController.java`)
```java
@RestController
@RequestMapping("/api/sms")
public class SmsController {
@Autowired
private ISmsService smsService;
@PostMapping("/sendVerificationCode")
public ResponseEntity<String> sendVerificationCode(@RequestParam String phoneNumber){
try {
boolean result = smsService.sendVerificationCode(phoneNumber);
if(result){
return new ResponseEntity<>("Success", HttpStatus.OK);
}else{
return new ResponseEntity<>("Failed to Send Verification Code.",HttpStatus.INTERNAL_SERVER_ERROR);
}
} catch (Exception e) {
logger.error(e.getMessage(),e);
return new ResponseEntity<>(e.getMessage(),HttpStatus.BAD_REQUEST);
}
}
}
```
##### 服务层逻辑 (`ISmsServiceImpl.java`)
```java
@Service
@Slf4j
public class ISmsServiceImpl implements ISmsService{
@Value("${sms.accessKeyId}")
private String accessKeyId;
@Value("${sms.secret}")
private String secret;
@Value("${sms.signName}")
private String signName;
@Value("${sms.templateCode}")
private String templateCode;
Random random=new Random();
@Override
public Boolean sendVerificationCode(String mobilePhoneNo)throws Exception{
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",accessKeyId,secret );
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
// 设置参数
request.putQueryParameter("RegionId","cn-hangzhou");
request.putQueryParameter("PhoneNumbers",mobilePhoneNo);
request.putQueryParameter("SignName",signName);
request.putQueryParameter("TemplateCode",templateCode);
int code=random.nextInt(899999)+100000;//六位数验证码
JSONObject paramsJsonObj=new JSONObject();
paramsJsonObj.put("code",String.valueOf(code));
request.putQueryParameter("TemplateParam",paramsJsonObj.toJSONString());
CommonResponse response =client.getCommonResponse(request);
log.info(response.getData());
return response.isSuccess();
}
}
```
这段 Java 代码实现了基于阿里云短信息服务 API 的验证码发送机制。
阅读全文