この記事では主にメール登録機能を実装する Spring Boot のサンプルコードを紹介しますが、編集者が非常に良いと思ったので、参考として共有させていただきます。エディターをフォローして見てみましょう
登録プロセス
1. [フロントエンド] ユーザーは登録ページで登録情報を送信します
2. 送信されたパラメーターを確認します。エラーがある場合は、ユーザーが直接エラーメッセージを返し、エラーなしで実行します。
3. [バックエンド] IDをランダムに生成し、そのIDをキーとして使用し、それを値として保存します。 redis、期間を設定します
4 .[バックエンド] アクティブ化リンクを生成し、電子メール システムを通じてユーザーのメールボックスに電子メールを送信します
5.[フロントエンド] ユーザーは、上の図;
6.[バックエンド] 値が期限切れかどうかを確認し、登録されていない場合は、ユーザー情報をデータベースに保存し、ユーザーが正常に登録されたことを確認します。実装 (逆分析)
1. まず、mail送信
cn.ictgu.toolsの実装を見てみましょう。 mail.MailServicepackage cn.ictgu.tools.mail; import cn.ictgu.dao.model.User; import com.alibaba.fastjson.JSONObject; import lombok.extern.log4j.Log4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; /** * 邮件服务 * Created by Silence on 2017/3/11. */ @Service @Log4j public class MailService { @Autowired private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from; private static final String TITLE_SIGN_UP = "[邮件标题]"; private static final String CONTENT = "[邮件内容]"; public void userValidate(User user, String token){ MimeMessage mailMessage = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "GBK"); helper.setFrom(from); helper.setTo(user.getEmail()); helper.setSubject(TITLE_SIGN_UP); String link = "http://www.ictgu.cn/validate/" + token; String message = String.format(CONTENT, user.getNickname(), link, link, user.getEmail()); helper.setText(message, true); mailSender.send(mailMessage); } catch (MessagingException e) { log.error("发送邮件失败:User:" + JSONObject.toJSONString(user) + ", Token: " + token); } }説明: 電子メールを送信するには、2つのパラメータを渡す必要があります。 、ユーザーとトークン。ユーザーはユーザー登録の情報です。トークンはredisに対応するキーがあり、その値はユーザーの
文字列です。 (重要なルールは設定ファイルredis.prefix.signUp + UUID) メールテンプレートの問題:
メールコンテンツの本質は文字列であり、スタイルは開発中にhtml+cssによって制御されます。 、メールは適切なテンプレートに設計されています。
変数を %s に置き換えてから、メールを送信するときに String.format() メソッドを使用して %s を実際の値に置き換えてください。エンドユーザーにはメールが表示されます。したがって、サードパーティのテンプレートを使用する必要はなく、同じ機能を可能な限り簡素化できます。
2. トークンを生成するには? cn.ictgu.redis.RedisTokenManager を参照してください
public String getTokenOfSignUp(User user){ String token = UUID.randomUUID().toString(); String value = JSONObject.toJSONString(user); stringRedisTemplate.opsForValue().set(signUpPrefix + token, value); stringRedisTemplate.expire(signUpPrefix + token, 12, TimeUnit.HOURS); return token; }
説明: UUID.randomUUID().toString() は、主キーを自動的に生成するために javaJDK によって提供されるメソッドです。 UUID (Universall
y Unique Ident
ifier) は、マシン上で生成される、同じ時間および空間内のすべてのマシンに対して一意であることが保証されている 16 桁の数字で構成されます。数字で構成され、形式で表現されます。これは次の部分の組み合わせです: 現在の日付と時刻 (UUID の最初の部分は時刻に関連しており、数秒後に UUID を生成すると、最初の部分は異なり、残りは同じになります)。クロック シーケンス、グローバルに一意の IEEE マシン識別番号 (ネットワーク カードがある場合はネットワーク カードから取得され、ネットワーク カードがない場合は他の方法で取得されます) UUID の唯一の欠点は、生成される UUID です。結果の文字列は比較的長くなります。 3. トークンを取得したら、電子メールを送信するためにサービス層でユーザーとトークンを関連付ける必要があります。cn.ictgu.dao.service.UserService public boolean signUp(User user){
String email = user.getEmail();
if (existEmail(email)){
log.error("用户注册,邮箱已注册:" + email);
return false;
}
sendValidateEmail(user);
return true;
}
@Async
private void sendValidateEmail(User user){
String token = tokenManager.getTokenOfSignUp(user);
log.error("用户注册,准备发送邮件:User:" + JSONObject.toJSONString(user) + ", Token: " + token);
mailService.userValidate(user, token);
}
private boolean existEmail(String email){
return mapper.selectByEmail(email) != null;
}
注: 電子メールの送信には時間がかかります。 、そのため、ユーザーエクスペリエンスを向上させる非同期を使用してください
4. ユーザーはシンプルです
@RestController public class UserApi { @Autowired private UserService userService; @RequestMapping(value = "/sign-up", method = RequestMethod.POST) public SimpleResponse signUp(HttpServletRequest request){ User user = createUser(request); SimpleResponse response = checkSignUpRequest(user); if (response.getCode() == 100){ if (!userService.signUp(user)){ response.setCode(200); response.setMessage("此邮箱已注册,请勿重复注册!"); return response; }else { response.setMessage("注册激活邮件已发送至您邮箱,请在12小时内激活完成注册!"); return response; } } return response; } private SimpleResponse checkSignUpRequest(User user){ SimpleResponse response = new SimpleResponse(); String email = user.getEmail(); if (!CheckUtils.checkEmail(email)){ response.setCode(200); response.setMessage("邮箱格式不合法"); return response; } String password = user.getPassword(); if (!CheckUtils.checkPassword(password)){ response.setCode(200); response.setMessage("密码长度必须为8-16位,且必须包含数字和字母"); return response; } String nickname = user.getNickname(); if (!CheckUtils.checkNickname(nickname)){ response.setCode(200); response.setMessage("昵称长度不合法"); return response; } response.setCode(100); return response; } }
説明: このレイヤーは主にユーザー登録パラメーターの検証を行います
レンダリング
レビュー
下から上へ、これはユーザーを登録してメールを送信することで実現されます。ユーザーの行動は信頼できないため、
安全なバックエンドシステムを構築するために必要です。死角なくパラメータを検証できます。 。 。 。 【関連お勧め】1.
Java無料ビデオチュートリアル 3.以上がJavaでメール登録機能を完成させる例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

bytecodeachievesplatformedentencedexedectedbyavirtualMachine(VM)、forexApplev.forexample、javabytecodecanrunrunrunnonydevicewithajvm、writeonce、runany "ferfuctionality.whilebytecodeOffersenhの可能性を承認します

Javaは100%のプラットフォームの独立性を達成することはできませんが、そのプラットフォームの独立性はJVMとBytecodeを通じて実装され、コードが異なるプラットフォームで実行されるようにします。具体的な実装には、次のものが含まれます。1。bytecodeへのコンパイル。 2。JVMの解釈と実行。 3。標準ライブラリの一貫性。ただし、JVMの実装の違い、オペレーティングシステムとハードウェアの違い、およびサードパーティライブラリの互換性は、プラットフォームの独立性に影響を与える可能性があります。

Javaは、「Write onse、Averywhere」を通じてプラットフォームの独立性を実現し、コードの保守性を向上させます。 2。メンテナンスコストが低いため、1つの変更のみが必要です。 3.チームのコラボレーション効率が高く、知識共有に便利です。

新しいプラットフォームでJVMを作成することに直面する主な課題には、ハードウェアの互換性、オペレーティングシステムの互換性、パフォーマンスの最適化が含まれます。 1。ハードウェア互換性:JVMがRISC-Vなどの新しいプラットフォームのプロセッサ命令セットを正しく使用できるようにする必要があります。 2。オペレーティングシステムの互換性:JVMは、Linuxなどの新しいプラットフォームのシステムAPIを正しく呼び出す必要があります。 3。パフォーマンスの最適化:パフォーマンステストとチューニングが必要であり、ガベージコレクション戦略が新しいプラットフォームのメモリ特性に適応するように調整されます。

javafxefcectivelyaddressessessistencisingisingidevidementsyusaplatform-agnosticscenegraphandcssstyling.1)itabstractsplatformspificsthroughascenegraph、Assuring-sunsinstentrenderingacrosswindows、macos、andlinux.2)

JVMは、Javaコードをマシンコードに変換し、リソースを管理することで機能します。 1)クラスの読み込み:.classファイルをメモリにロードします。 2)ランタイムデータ領域:メモリ領域を管理します。 3)実行エンジン:実行バイトコードを解釈またはコンパイルします。 4)ローカルメソッドインターフェイス:JNIを介してオペレーティングシステムと対話します。

JVMにより、Javaはプラットフォームを介して実行できます。 1)jvmは、bytecodeをロード、検証、実行します。 2)JVMの作業には、クラスの読み込み、バイトコード検証、解釈の実行、およびメモリ管理が含まれます。 3)JVMは、動的クラスの読み込みや反射などの高度な機能をサポートしています。

Javaアプリケーションは、次の手順を通じて異なるオペレーティングシステムで実行できます。1)ファイルまたはパスクラスを使用してファイルパスを処理します。 2)System.getEnv()を介して環境変数を設定および取得します。 3)MavenまたはGradleを使用して、依存関係を管理し、テストします。 Javaのクロスプラットフォーム機能は、JVMの抽象化レイヤーに依存していますが、特定のオペレーティングシステム固有の機能の手動処理が必要です。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









