Javaは認証コードSMSを送信する機能を実装しています
機能要件:
(学習ビデオ共有: java ビデオ チュートリアル)
1. ランダムに 4 つの文字を生成します。背景
2. 1 分以内に送信できる確認コードは 1 つだけです。
3. 1 分を超えて 5 分以内に送信された確認コードは、生成された確認コード文字のままです。
4. 5 分以上経過すると、新しい検証コードが生成されます
フロントエンドが使用するフレームワークに関係なく
依存関係の構成
SMS 依存関係パッケージの redis 構成。確認コードと携帯電話番号が redis に保存されるためです。
SMS プラットフォームで使用されるネットワーク構築 sms、http://www.smschinese.cn/ を使用できます。無料のテスト
注: インターフェイスを構成するためのアカウント名とキーは人によって異なります。コピーして忘れずに変更してください
SMS 依存関係パッケージ
<!--短信jar包--> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
redis jar package
<!--redis jar 包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
redis を使用する前に、まず接続を構成し、application.properties で構成する必要があります。
# redis 属性信息 ## redis数据库索引(默认为0) spring.redis.database=0 ## redis服务器地址 spring.redis.host=localhost ## redis服务器连接端口 spring.redis.port=6379 ## redis服务器连接密码(默认为空) ## spring.redis.password=123456 ## 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=8 ## 连接池中的最大空闲连接 spring.redis.jedis.pool.max-idle=8 ## 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait=-1ms ## 连接池中的最小空闲连接 spring.redis.jedis.pool.min-idle=0
ツール クラスを作成します。 StrUtils.getComplexRandomString () // ランダムな文字数を取得し、自分で入力します
import java.util.ArrayList; import java.util.List; import java.util.Random; /** * @author yaohuaipeng * @date 2018/10/26-16:16 */ public class StrUtils { /** * 把逗号分隔的字符串转换字符串数组 * * @param str * @return */ public static String[] splitStr2StrArr(String str,String split) { if (str != null && !str.equals("")) { return str.split(split); } return null; } /** * 把逗号分隔字符串转换List的Long * * @param str * @return */ public static List<Long> splitStr2LongArr(String str) { String[] strings = splitStr2StrArr(str,","); if (strings == null) return null; List<Long> result = new ArrayList<>(); for (String string : strings) { result.add(Long.parseLong(string)); } return result; } /** * 把逗号分隔字符串转换List的Long * * @param str * @return */ public static List<Long> splitStr2LongArr(String str,String split) { String[] strings = splitStr2StrArr(str,split); if (strings == null) return null; List<Long> result = new ArrayList<>(); for (String string : strings) { result.add(Long.parseLong(string)); } return result; } public static String getRandomString(int length) { String str = "0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(10); sb.append(str.charAt(number)); } return sb.toString(); } public static String getComplexRandomString(int length) { String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(62); sb.append(str.charAt(number)); } return sb.toString(); } public static String convertPropertiesToHtml(String properties){ //1:容量:6:32GB_4:样式:12:塑料壳 StringBuilder sBuilder = new StringBuilder(); String[] propArr = properties.split("_"); for (String props : propArr) { String[] valueArr = props.split(":"); sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>"); } return sBuilder.toString(); } }
他のクラスが呼び出す SMS 送信クラス構成インターフェイスを作成します。このクラスの send メソッドは、携帯電話番号を渡してコンテンツを送信できます
import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; import java.io.IOException; public class SendMsgUtils { private static final String UID = "amazingwest";//这是建网SMS 上的登陆账号 private static final String KEY = "d41d8cd98f00b204e980"; //这是密钥 /** * 手机发送短信 * @param phone 手机号码 * @param context 发送短信内容 */ public static void send(String phone, String context) { PostMethod post = null; try { //创建Http客户端 HttpClient client = new HttpClient(); //创建一个post方法 post = new PostMethod("http://utf8.api.smschinese.cn"); //添加请求头信息 post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf8");//在头文件中设置转码 NameValuePair[] data = {new NameValuePair("Uid", UID), new NameValuePair("Key", KEY), new NameValuePair("smsMob", phone), new NameValuePair("smsText", context)}; //设置请求体 post.setRequestBody(data); //执行post方法 client.executeMethod(post); //获取响应头信息 Header[] headers = post.getResponseHeaders(); //获取状态码 int statusCode = post.getStatusCode(); System.out.println("statusCode:" + statusCode); //循环打印头信息 for (Header h : headers) { System.out.println(h.toString()); } //获取相应体 String result = new String(post.getResponseBodyAsString().getBytes("utf8")); System.out.println(result); //打印返回消息状态 } catch (IOException e) { e.printStackTrace(); } finally { if (post != null) { //关闭资源 post.releaseConnection(); } } } }
登録を作成します定数クラス。主に、認証コードが登録、ログイン、またはパスワードの取得に使用されるかどうかを区別するために使用されます。
/** * 验证码常量 */ public class VerificationConstant { //用户注册常量 public static final String USER_REG = "user_reg"; }
フロント デスク クリックして認証コードを送信する場合、まず複数の認証コードの同時登録を考慮する必要があります。
まず、携帯電話番号と登録識別子(KEY)を合わせた値でredis内の値が存在するかどうかを判断し、存在しない場合はキーを作成します。キー 携帯電話番号に登録マークを追加します。
時間を決定するために、Redis のキーと値のペアを作成するときに、現在のタイムスタンプが値に追加されます。値が最初に作成された場合、値は分割されます. 値から現在のタイムスタンプを減算します。特定の時間は、1 回の作成のタイムスタンプから取得できます。
初めてキー値を作成するときは、キーの生存時間を 5 分 300 秒に設定します。
送信フロントエンドから認証コードのテキストメッセージが送信され、携帯電話番号が送信されます。ここで取引を行ってください。携帯電話番号が登録されているかどうかを論理的に判断する必要はありません。これは他のクラスの問題です。redisTemplate を使用するには、 redis jar パッケージを導入する必要があります
StrUtils.getComplexRandomString(4) これは、4 桁の文字を作成するために上記で作成されたツール クラスのメソッドです。乱数
StringUtils.isEmpty は、org.springframework.util のインポートです。 StringUtils 誤解しないでください。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.concurrent.TimeUnit; @Service public class VerificationCodeServiceImpl implements IVerificationCodeService { @Autowired private RedisTemplate redisTemplate; /** * 发送注册验证码 * 验证码需求: * 1.后台随机产生4个字符 * 2.1分钟以内只能发送1次验证码 * 3.超过1分钟,但在5分钟以内,发送的验证码依然是第一次产生的验证码字符 * 4.超过了5分钟以后,产生全新的验证码 * @return */ @Override public void sendRegisterVerificationCode(String phone) throws CustomException { //随机产生4个字符 String value = StrUtils.getComplexRandomString(4); //在redis中通过key获取对应的值 value:时间戳 String valueCode = (String) redisTemplate.opsForValue().get(phone + ":" + VerificationConstant.USER_REG); //如果不为空,就意味着验证码没有过期,依然是在5分钟以内 if(!StringUtils.isEmpty(valueCode)){ //开始时间戳 String beginTimer = valueCode.split(":")[1]; if(System.currentTimeMillis()-Long.valueOf(beginTimer)<=60*1000){ //自定义异常,自己创建一个就可以了 throw new CustomException("亲!一分钟以内不能发送多次验证码!!"); } //证明是超过了1分钟,但依然在5分钟以内,还是用之前的验证码 value = valueCode.split(":")[0]; } //存储redis中,设置有效期是5分钟 k=phone:USER_REG v= value:时间戳 // RedisUtil.set(phone:USER_REG, value:System.currentTimeMillis(), 5MIN); redisTemplate.opsForValue().set(phone + ":" + VerificationConstant.USER_REG, value + ":" + System.currentTimeMillis(), 5, TimeUnit.MINUTES); //发送手机验证码 String context = "尊敬的用户,您的验证码为:" + value + ",请您在5分钟以内完成注册!!"; //发送短信 // SendMsgUtils.send(phone, context); System.out.println(context); } }
完了です。
関連する推奨事項: Java 入門チュートリアル
以上がJavaは認証コードSMSを送信する機能を実装していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
