Springemail一時パスワード発行
最終プロジェクトを行う過程で、Eメール連動を実施しました.
いろいろなコードがありますがspringの特性で
設定が複雑すぎて想像以上に時間がかかります.
まず、springに基づいてxmlではなくjavaクラスとして実装します.
NAVER、
新しいgmailアカウントを作成して使用するには、gmailに基づいて作成します.
まず、パスワードを一時的に発行する追加dependencyは1つの設定しかありません.
(必ずmavenを更新してください)
Eメールアドレスは直接実行できますが、この項目では直接入力できます.
この部分でもエラーが発生しました.参考にしたブログでは、送信された一時パスワードを暗号化し、保存して更新するように要求されていました.そうすれば
更新したパスワードでログインできないエラーが発生しました.
1つの実行順序も完全に逆転し、エラーが発生することに注意してください.
いろいろなコードがありますがspringの特性で
設定が複雑すぎて想像以上に時間がかかります.
まず、springに基づいてxmlではなくjavaクラスとして実装します.
NAVER、
新しいgmailアカウントを作成して使用するには、gmailに基づいて作成します.
poem
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
->詩歌の設定も多様で、会員入学試験に必要な詩歌の設定も異なる.まず、パスワードを一時的に発行する追加dependencyは1つの設定しかありません.
(必ずmavenを更新してください)
MailUtil
public class MailUtil {
@Autowired UserService service;
public void sendEmail(UserVo vo) throws Exception{
//Mail Server 설정
String charSet="utf-8";
String hostSMTP="smtp.gmail.com";
String hostSMTPid=""; //관리자 이메일 아이디
String hostSMTPpw=""; //관리자 이메일 비밀번호
//보내는 사람
String fromEmail=""; //보내는 사람 이메일
String fromName=""; //보내는 사람 이름
String subject=""; //메일 제목
String msg="";
msg +="<div align='lift'";
msg +="<h3>";
msg +=vo.getUi_id() + "님의 임시 비밀번호입니다. <br>로그인 후 비밀번호를 변경해 주세요</h3>";
msg +="<p>임시 비밀번호:";
msg +=vo.getUi_pwd() + "</p></div>";
//email전송
String mailRecipient=vo.getUi_email();//받는 사람 이메일 주소
try {
//객체 선언
HtmlEmail mail = new HtmlEmail();
mail.setDebug(true);
mail.setCharset(charSet);
mail.setSSLOnConnect(true);
mail.setHostName(hostSMTP);
mail.setSmtpPort(587);
mail.setAuthentication(hostSMTPid, hostSMTPpw);
mail.setStartTLSEnabled(true);
mail.addTo(mailRecipient,charSet);
mail.setFrom(fromEmail, fromName, charSet);
mail.setSubject(subject);
mail.setHtmlMsg(msg);
mail.send();
}catch(Exception e) {
e.printStackTrace();
}
}
public void findPw(HttpServletResponse response,UserVo vo) {
response.setContentType("text/html;charset=utf-8");
}
}
->メールを送信するクラスプリファレンスやNAVERや次、Googleなどでどのようにメールを送信するかについての設定ですが、ここにメールを送信する管理者メールアドレスやパスワード設定部分もありますので、羽連動などでプロジェクトを行う場合は注意しましょう.Eメールアドレスは直接実行できますが、この項目では直接入力できます.
UserServiceController
@RestController
public class UserMailController {
@Autowired private UserService service;
@GetMapping(value = "/finduserpwd",produces = {MediaType.APPLICATION_JSON_VALUE})
public @ResponseBody String findPw(UserVo vo) throws Exception {
BCryptPasswordEncoder encoder= new BCryptPasswordEncoder();
String result=null;
//회원정보 불러오기
UserVo vo1 = service.searchPwd(vo);
System.out.println(vo1);
//가입된 이메일이 존재한다면 이메일 전송
if(vo1!=null) {
//임시 비밀번호 생성(UUID이용)
String tempPw=UUID.randomUUID().toString().replace("-", "");//-를 제거
tempPw = tempPw.substring(0,10);//tempPw를 앞에서부터 10자리 잘라줌
vo1.setUi_pwd(tempPw);//임시 비밀번호 담기
MailUtil mail=new MailUtil(); //메일 전송하기
mail.sendEmail(vo1);
service.updatePwd(vo1);
String securePw = encoder.encode(vo1.getUi_pwd());//회원 비밀번호를 암호화하면 vo객체에 다시 저장
vo1.setUi_pwd(securePw);
result="true";
}else {
result="false";
}
return result;
}
}
->コントロールとサービスの部分をdaoではなくmapperとmapperinterfaceを使用して混同します.mailutilを作成してservice=controllerとして作成この部分でもエラーが発生しました.参考にしたブログでは、送信された一時パスワードを暗号化し、保存して更新するように要求されていました.そうすれば
更新したパスワードでログインできないエラーが発生しました.
1つの実行順序も完全に逆転し、エラーが発生することに注意してください.
Mapper
//아이디와 이메일이 DB에 존재하는지 먼저 검사
<select id="searchPwd" parameterType="com.jhta.project.vo.user.UserVo" resultType="com.jhta.project.vo.user.UserVo">
select * from user_information where ui_id=#{ui_id} and ui_email=#{ui_email}
</select>
//임시비밀번호 발급을 위한 업데이트
<update id="updatePwd" parameterType="com.jhta.project.vo.user.UserVo">
update user_information set ui_pwd=#{ui_pwd} where ui_id=#{ui_id} and ui_email=#{ui_email}
</update>
FindPwd.jsp
<script type="text/javascript">
$(function(){
$("#btn").click(function(){
let ui_id=$("input[name='ui_id']").val();
let ui_email=$("input[name='ui_email']").val();
$.ajax({
url:"/project/finduserpwd",
dataType:'json',
data:{"ui_id":ui_id,"ui_email":ui_email},
success:function(data){
if(data==true){
alert("임시 비밀번호가 발급되었습니다.메일함을 확인해 주세요");
console.log(data);
}else{
alert("아이디 또는 이메일을 정확하게 입력해 주세요");
console.log(data);
}
}
});
});
});
</script>
</head>
<body>
<form action="${cp}/finduserpwd" method="post">
<h2>임시 비밀번호 발급</h2>
아이디<br>
<input type="text" name="ui_id"><br>
이메일<br>
<input type="email" name="ui_email"><br>
<input type="button" value="임시비밀번호 발급" id="btn"><br>
<a href="${cp }/loginuser">로그인</a> | <a href="${cp }/insertuser">회원가입</a>
</form>
</body>
</html>
Reference
この問題について(Springemail一時パスワード発行), 我々は、より多くの情報をここで見つけました https://velog.io/@duawldms/spring-email-임시비밀번호-발급テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol