阿里雲伺服器+springboot
阿新 • • 發佈:2021-06-24
1.阿里雲前期準備(多圖步驟⚠)
登入阿里雲賬號
建立完使用者組之後,給使用者組新增簡訊服務許可權
之後在對應的使用者組中建立使用者,以及給使用者新增許可權。這裡需要注意的是在建立使用者的時候,阿里雲給的accessKeyId和## 標題accessKeySecret,記得把這兩個儲存下來,特別是accessKeySecret只在你建立使用者的時候顯示,忘了的話只能刪除accessKeyId再新建一個了。(我第一次踩了這個坑)
2.開通阿里雲服務
1.搜尋框搜尋簡訊服務
2.如何是國內訊息,在國內訊息中新增自己的簽名和模板
3.編寫測試程式碼
1.匯入相關依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 阿里雲簡訊依賴 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.1.0</version> </dependency> <!--fastjson,用來解析json--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version> </dependency> <!--redis依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.4.5</version> </dependency> </dependencies>
2.yml配置
server:
port: 8080
#redis 相關的配置
spring:
redis:
host: 127.0.0.1
port: 6379
3.service層
public interface SendSms { /** * 傳送簡訊驗證碼 * @param phoneNum 手機號 * @param templateCode 模板號 * @param code 驗證碼 * @return */ public Boolean send(String phoneNum, String templateCode, Map<String,Object> code); }
@Service public class SendSmsImpl implements SendSms { /** * 傳送簡訊驗證碼 * @param phoneNum 手機號 * @param templateCode 模板號 * @param code 驗證碼 * @return */ @Override public Boolean send(String phoneNum, String templateCode, Map<String, Object> code) { // 連線阿里雲 DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "請替換為你的accessKeyId", "請替換為你的accessKeySecret"); IAcsClient client = new DefaultAcsClient(profile); // 構建請求 CommonRequest request = new CommonRequest(); request.setMethod(MethodType.POST); // 這些內容不要動,是人家阿里爸爸弄出來的,咱不用管 request.setDomain("dysmsapi.aliyuncs.com"); request.setVersion("2017-05-25"); // 自己的內容,此處 SendSms 為傳送驗證碼 request.setAction("SendSms"); //自定義的引數(手機號,驗證碼,簽名,模板! ) //這是我的內容,請結合你的情況修改為你的東西!!! request.putQueryParameter( "PhoneNumbers",phoneNum); request.putQueryParameter( "SignName","行攝時光"); request.putQueryParameter( "TemplateCode",templateCode); request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code)); try { CommonResponse response = client.getCommonResponse(request); // 在控制檯上打印出返回資訊 System.out.println(response.getData()); // 返回請求資訊是否成功 return response.getHttpResponse().isSuccess(); } catch (ClientException e) { e.printStackTrace(); } return false; } }
4.console層
@RestController
@CrossOrigin //跨域支援
public class SmsController {
@Autowired
private SendSms sendSms;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@GetMapping("/send/{phone}")
public String code(@PathVariable("phone") String phone) {
//呼叫傳送方法,模擬真實業務,redis
String code = redisTemplate.opsForValue().get(phone);
if (!StringUtils.isEmpty(code)) {
return phone + ":" + code + "已存在,還沒有過期";
}
// 生成驗證碼並且儲存到 redis 中
code = UUID.randomUUID().toString().substring(0, 5);
HashMap<String, Object> param = new HashMap<>();
param.put("code", code);
boolean isSend = sendSms.send(phone, "SMS_218565322", param);
if (isSend) {
redisTemplate.opsForValue().set(phone, code, 300, TimeUnit.SECONDS);
return phone + ":" + code + "傳送成功!";
} else {
retn "傳送失敗!";
}
}
}
小白一名,歡迎寶貝們批評指錯。