この記事では主にメール登録機能を実装する 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); } }
文字列です。 (重要なルールは設定ファイル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; }
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 サイトの他の関連記事を参照してください。