1. 程式人生 > 其它 >阿里雲伺服器+springboot

阿里雲伺服器+springboot

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 "傳送失敗!";
        }
    }
}

小白一名,歡迎寶貝們批評指錯。