현재 Java 프로젝트에서 암호 분실 기능을 구현 중입니다. 내 방법은자바에서 비밀번호 재설정 링크
사용자는 비밀번호 찾기 링크를 클릭한다.
암호 분실 페이지에서 시스템에 등록한 주소
주소를 입력하라는 메시지가 표시됩니다. 리셋 암호 페이지 링크가 주어진 이메일 주소를 포함이메일.
사용자가 링크를 클릭하면 페이지로 리디렉션됩니다 (비밀번호 재설정) 사용자가 새 비밀번호를 입력 할 수 있습니다.
암호 재설정 페이지에서 "전자 메일 주소"필드가 자동으로 채워집니다.
비활성화되어 있기 때문에 변경할 수 없습니다.그러면, 사용자는 자신의 새 암호 및 데이터베이스의 이메일 주소로 관련 분야 업데이트됩니다를 입력합니다.
내 코드에서 이것을 시도했지만 암호 재설정 페이지에서 암호를 변경하려는 사용자의 전자 메일 ID를 얻지 못했습니다.
MailUtil.java
package com.example.controller;
import java.io.IOException;
import java.security.Security;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import com.example.util.Database;
public class MailUtil {
private static final String USERNAME = "[email protected]";
private static final String PASSWORD = "test";
private static final String SUBJECT = "Reset Password link";
private static final String HOST = "smtp.gmail.com";
private static final String PORT = "465";
String email;
public MailUtil() {
// TODO Auto-generated constructor stub
email = this.email;
}
public boolean sendMail(String to, HttpServletRequest request) throws SQLException, ServletException, IOException{
Connection conn = Database.getConnection();
Statement st = conn.createStatement();
String sql = "select * from login where email = '" + to + "' ";
ResultSet rs = st.executeQuery(sql);
String pass = null;
String firstName = null;
while(rs.next()){
pass = rs.getString("pass");
firstName = rs.getString("firstName");
}
if(pass != null){
setEmailId(to);
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
Properties props = new Properties();
props.put("mail.smtp.host", HOST);
props.put("mail.stmp.user", USERNAME);
// If you want you use TLS
//props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.password", PASSWORD);
// If you want to use SSL
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.socketFactory.port", PORT);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
String username = USERNAME;
String password = PASSWORD;
return new PasswordAuthentication(username, password);
}
});
String from = USERNAME;
String subject = SUBJECT;
MimeMessage msg = new MimeMessage(session);
try{
msg.setFrom(new InternetAddress(from));
InternetAddress addressTo = new InternetAddress(to);
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSubject(subject);
String vmFileContent = "Hello User, <br><br> Please Click <a href='http://192.168.15.159:8080/SampleLogin/new-password.jsp><strong>here</strong></a> to reset your password. <br><br><br> Thanks,<br>ProAmbi Team";
// Send the complete message parts
msg.setContent(vmFileContent,"text/html");
Transport transport = session.getTransport("smtp");
transport.send(msg);
System.out.println("Sent Successfully");
return true;
}catch (Exception exc){
System.out.println(exc);
return false;
}
}else{
//System.out.println("Email is not registered.");
request.setAttribute("errorMessage", "User with this email id doesn't exist.");
return false;
}
}
public String getEmailID() {
return email;
}
public void setEmailId(String email) {
this.email = email;
}
}
그리고 나의 새로운 password.jsp.
<%
MailUtil mail = new MailUtil();
String email = mail.getEmailID();
System.out.println("---> "+email);
%>
하지만 이메일 ID 대신 null 값이 있습니다.
는 행복은 나에게이 문제를 해결하거나이 작업을 수행하는 다른 옵션을 얻을 수 있습니다.
그래서 당신은 인스턴스화 새 MailUtil 객체를 만든 다음 전자 메일 ID가 마술처럼 포함될 것으로 기대하십니까? – Gimby
util 클래스는 기본 생성자가 없으므로 기본적으로 인스턴스 변수는 null입니다. 값을 설정하지 않았거나 sendMail 메서드를 호출하지 않으면이 인스턴스에 값이있을 것이라고 예상하지 않습니다. – AxelH
@newuserua_ext, 'to'가 null 인 경우 데이터베이스에서 유용한 정보를 반환합니다. 방법 ... SQL 주입을보십시오! – AxelH