Java implementiert die Funktion zum Senden von Best?tigungscode-SMS
Jan 20, 2021 am 09:52 AMFunktionale Anforderungen:
(Lernvideo-Sharing: Java-Video-Tutorial)
1. Generieren Sie zuf?llig 4 Zeichen im Hintergrund2. Nur 1 Best?tigungscode kann innerhalb von 1 Minute gesendet werden als 1 Minute, aber innerhalb von 5 Minuten ist der gesendete Best?tigungscode immer noch das zum ersten Mal generierte Best?tigungscodezeichen4 Nach mehr als 5 Minuten wird ein neuer Best?tigungscode generiertEs spielt keine Rolle, um welches Framework es sich handelt Wird im Frontend verwendetH?ngt von der Konfiguration abSMS h?ngt von der Redis-Konfiguration des Pakets ab, da der Best?tigungscode und die Mobiltelefonnummer in Redis gespeichert sindDie von der SMS-Plattform verwendete Netzwerk-SMS http://www. smschinese.cn/ kann mit 5 Tests kostenlos verwendet werdenHinweis: Konfiguration Der Kontoname und der Schlüssel der Schnittstelle sind für jeden unterschiedlich. Kopieren Sie ihn und denken Sie daran, ihn zu ?ndern. SMS-Abh?ngigkeitspaket.
<!--短信jar包--> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>. Redis-JAR-Paket
Bevor Sie Redis verwenden, müssen Sie zun?chst die Verbindung konfigurieren und in application.properties konfigurieren
<!--redis jar 包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
Erstellen Sie eine Tool-Klasse StrUtils.getComplexRandomString () // Ermitteln Sie die Anzahl der zuf?lligen Zeichen und geben Sie sie selbst ein
# redis 屬性信息 ## redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0) spring.redis.database=0 ## redis服務(wù)器地址 spring.redis.host=localhost ## redis服務(wù)器連接端口 spring.redis.port=6379 ## redis服務(wù)器連接密碼(默認(rèn)為空) ## spring.redis.password=123456 ## 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制) spring.redis.jedis.pool.max-active=8 ## 連接池中的最大空閑連接 spring.redis.jedis.pool.max-idle=8 ## 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制) spring.redis.jedis.pool.max-wait=-1ms ## 連接池中的最小空閑連接 spring.redis.jedis.pool.min-idle=0
Erstellen Sie eine SMS-Sendeklasse Konfigurationsschnittstelle. Andere Klassen k?nnen die Sendemethode dieser Klasse aufrufen, um die Mobiltelefonnummer zu übergeben und Inhalte zu senden. Erstellen Sie eine Registrierungskonstantenklasse. Sie wird haupts?chlich verwendet, um zu unterscheiden, ob der Best?tigungscode für die Registrierung, Anmeldung oder das Passwort verwendet wird Abruf
import java.util.ArrayList; import java.util.List; import java.util.Random; /** * @author yaohuaipeng * @date 2018/10/26-16:16 */ public class StrUtils { /** * 把逗號(hào)分隔的字符串轉(zhuǎn)換字符串?dāng)?shù)組 * * @param str * @return */ public static String[] splitStr2StrArr(String str,String split) { if (str != null && !str.equals("")) { return str.split(split); } return null; } /** * 把逗號(hào)分隔字符串轉(zhuǎn)換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; } /** * 把逗號(hào)分隔字符串轉(zhuǎn)換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(); } }
Klicken Sie, um den Best?tigungscode an der Rezeption zu senden. Berücksichtigen Sie zun?chst die gleichzeitige Registrierung mehrerer Benutzer. Der Schlüsselwert kann nicht fest codiert werden. Fügen Sie zun?chst die Registrierungsidentifikation (KEY) entsprechend der Mobiltelefonnummer hinzu Bestimmen Sie, ob der Wert in Redis vorhanden ist. Der Schlüssel ist die Mobiltelefonnummer + Registrierungs-ID.
Beurteilen Sie die Zeit, d. h. beim Erstellen des Redis-Schlüssel-Wert-Paares zum Wert addiert werden, und der Wert wird vom Zeitstempel der ersten Erstellung dividiert, um den spezifischen Zeitpunkt zu erhalten Die überlebenszeit des Schlüssels betr?gt 5 Minuten und 300 Sekunden. Die Mobiltelefonnummer wird vom Frontend übertragen, und die Gesch?ftslogik muss nicht beurteilen, ob die Mobiltelefonnummer registriert ist Dinge. Um redisTemplate verwenden zu k?nnen, müssen Sie das Redis-JAR-Paket einführen.StrUtils.getComplexRandomString(4) Dies ist die oben erstellte Toolklasse. Eine der Methoden zum Erstellen einer 4-stelligen Zufallszahl,
StringUtils.isEmpty, ist import org.springframework. util.StringUtils Verstehen Sie es nicht falschimport 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";//這是建網(wǎng)SMS 上的登陸賬號(hào) private static final String KEY = "d41d8cd98f00b204e980"; //這是密鑰 /** * 手機(jī)發(fā)送短信 * @param phone 手機(jī)號(hào)碼 * @param context 發(fā)送短信內(nèi)容 */ public static void send(String phone, String context) { PostMethod post = null; try { //創(chuàng)建Http客戶端 HttpClient client = new HttpClient(); //創(chuàng)建一個(gè)post方法 post = new PostMethod("http://utf8.api.smschinese.cn"); //添加請(qǐng)求頭信息 post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf8");//在頭文件中設(shè)置轉(zhuǎn)碼 NameValuePair[] data = {new NameValuePair("Uid", UID), new NameValuePair("Key", KEY), new NameValuePair("smsMob", phone), new NameValuePair("smsText", context)}; //設(shè)置請(qǐng)求體 post.setRequestBody(data); //執(zhí)行post方法 client.executeMethod(post); //獲取響應(yīng)頭信息 Header[] headers = post.getResponseHeaders(); //獲取狀態(tài)碼 int statusCode = post.getStatusCode(); System.out.println("statusCode:" + statusCode); //循環(huán)打印頭信息 for (Header h : headers) { System.out.println(h.toString()); } //獲取相應(yīng)體 String result = new String(post.getResponseBodyAsString().getBytes("utf8")); System.out.println(result); //打印返回消息狀態(tài) } catch (IOException e) { e.printStackTrace(); } finally { if (post != null) { //關(guān)閉資源 post.releaseConnection(); } } } }komplett.
Verwandte Empfehlungen:
Java-Einführungs-TutorialDas obige ist der detaillierte Inhalt vonJava implementiert die Funktion zum Senden von Best?tigungscode-SMS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Um JDBC -Transaktionen korrekt zu verarbeiten, müssen Sie zun?chst den automatischen Komiti -Modus ausschalten und dann mehrere Vorg?nge ausführen und schlie?lich entsprechend den Ergebnissen festlegen oder rollen. 1. Nennen Sie Conn.SetAutoCommit (False), um die Transaktion zu starten. 2. Führen Sie mehrere SQL -Operationen aus, z. B. einfügen und aktualisieren. 3. Rufen Sie Conn.Commit () an, wenn alle Vorg?nge erfolgreich sind, und rufen Sie Conn.Rollback () auf, wenn eine Ausnahme auftritt, um die Datenkonsistenz zu gew?hrleisten. Gleichzeitig sollten Try-with-Ressourcen verwendet werden, um Ressourcen zu verwalten, Ausnahmen ordnungsgem?? zu behandeln und Verbindungen zu schlie?en, um Verbindungsleckage zu vermeiden. Darüber hinaus wird empfohlen, Verbindungspools zu verwenden und Save -Punkte zu setzen, um teilweise Rollback zu erreichen und Transaktionen so kurz wie m?glich zu halten, um die Leistung zu verbessern.

Pre-Formancetartuptimemoryusage, QuarkusandmicronautleadduToCompile-Time-foringandgraalvSupport, WithQuarkusofttenperformLightBetterin serverloser Szenarien.2. Thyvelopecosystem,

HTTP-Protokoll Middleware in Go kann Anforderungsmethoden, Pfade, Client-IP und zeitaufw?ndiges Aufzeichnen aufzeichnen. 1. Verwenden Sie http.Handlerfunc, um den Prozessor zu wickeln, 2. Nehmen Sie die Startzeit und die Endzeit vor und nach dem Aufrufen als n?chstes auf. Der vollst?ndige Beispielcode wurde überprüft, um auszuführen und eignet sich zum Starten eines kleinen und mittelgro?en Projekts. Zu den Erweiterungsvorschl?gen geh?ren das Erfassen von Statuscodes, die Unterstützung von JSON -Protokollen und die Nachverfolgung von ID -IDs.

Die Müllsammlung von Java (GC) ist ein Mechanismus, der automatisch den Speicher verwaltet, der das Risiko eines Speicherlecks verringert, indem unerreichbare Objekte zurückgeführt werden. 1.GC beurteilt die Zug?nglichkeit des Objekts aus dem Stammobjekt (z. B. Stapelvariablen, aktive Threads, statische Felder usw.) und nicht erreichbare Objekte als Müll markiert. 2. Basierend auf dem markierten Algorithmus markieren Sie alle erreichbaren Objekte und l?schen Sie nicht markierte Objekte. 3.. Verfolgen Sie eine Generationskollektionsstrategie: Die neue Generation (Eden, S0, S1) führt h?ufig MollGC aus; Die ?lteren Menschen erzielen weniger, dauert jedoch l?nger, um MajorGC durchzuführen. MetaPace speichert Klassenmetadaten. 4. JVM bietet eine Vielzahl von GC -Ger?ten: SerialGC ist für kleine Anwendungen geeignet; ParallelgC verbessert den Durchsatz; CMS reduziert sich

GradleStheBetterChoiceFormostnewProjectsDuetoitSuperiorFlexibilit?t, Leistung und ModerntoolingSupport.1.GRADLE'SGROOVY/KOTLINDSLISMORECONCISEANDEIPRESSIVETHANMANMANBOSEXML.2.GRAGRECONCISEANDEPRPRESSIVETHANMAVENSVOSEXML.2.

Durch die Auswahl des richtigen HTMlinput -Typs kann die Datengenauigkeit verbessert, die Benutzererfahrung verbessert und die Benutzerfreundlichkeit verbessert werden. 1. W?hlen Sie die entsprechenden Eingabetypen gem?? dem Datentyp aus, z. B. Text, E -Mail, Tel, Nummer und Datum, die automatisch überprüft und an die Tastatur anpassen k?nnen. 2. Verwenden Sie HTML5, um neue Typen wie URL, Farbe, Reichweite und Suche hinzuzufügen, die eine intuitivere Interaktionsmethode bieten k?nnen. 3.. Verwenden Sie Platzhalter und erforderliche Attribute, um die Effizienz und Genauigkeit der Formulierung zu verbessern. Es sollte jedoch beachtet werden, dass der Platzhalter das Etikett nicht ersetzen kann.

Die Verwendung der OpenCSV -Bibliothek ist die beste Wahl zum Lesen von CSV -Dateien. Es kann komplexe Situationen bew?ltigen und mehrere Merkmale unterstützt. 2. Für einfache CSV-Dateien k?nnen Sie Javas integriertes BufferedReader in Kombination mit Split-Methode verwenden. 3. Wenn Sie eine flexiblere Formatsteuerung ben?tigen oder Apache -Komponenten verwendet haben, k?nnen Sie Apache CommonsCSV ausw?hlen. OpenCSV wird für die Einfachheit, Robustheit und die F?higkeit, CSV -Probleme in realen Szenarien zu l?sen, empfohlen.

Die klare Antwort auf diese Frage ist die Empfehlung, das Beobachtermuster mithilfe einer benutzerdefinierten Observer -Schnittstelle zu implementieren. 1. Obwohl Java beobachtbar und Beobachter liefert, ist erstere eine Klasse und wurde veraltet und fehlt Flexibilit?t. 2. Die moderne empfohlene Praxis besteht darin, eine funktionale Observer -Schnittstelle zu definieren, und das Subjekt beh?lt die Beobachterliste bei und benachrichtigt alle Beobachter, wenn sich der Zustand ?ndert. 3.. Es kann in Kombination mit Lambda -Ausdrücken verwendet werden, um die Einfachheit und Wartbarkeit des Codes zu verbessern. V. Daher sollten neue Projekte ein benutzerdefiniertes Observer-Schnittstellenschema annehmen, das Typen ist, einfach zu testen und sich auf moderne Java spezialisiert zu haben
