#java #servlets #dao
#java #сервлеты #dao
Вопрос:
У меня проблема с тем, как действовать дальше. Пользователь вводит адрес электронной почты и нажимает забыли пароль. Затем сервлет вызовет Dao, чтобы проверить, существует ли электронная почта или нет, и если она существует, Dao сбросит пароль. Я хочу, чтобы Dao отправил сброшенный пароль обратно в сервлет и перенаправил другой сервлет для отправки электронной почты обратно пользователю со сброшенным паролем. Кто-нибудь может объяснить мне, как я могу это сделать?
Ниже приведен мой CheckEmailForgotDao
public class CheckEmailForgotDao{
String url = "jdbc:mysql://localhost:3308/mywebapp";
String username = "root";
String password = "root";
String sql = "SELECT * FROM users WHERE email=?";
public boolean check(String uname) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, username, password);
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, uname);
ResultSet rs = st.executeQuery();
if (rs.next()) {
String randomPassword = RandomStringUtils.randomAlphanumeric(10);
String resetsql = "UPDATE users SET password = ? WHERE email = ?";
PreparedStatement resetst = con.prepareStatement(resetsql);
resetst.setString(1, randomPassword);
resetst.setString(2, uname);
System.out.println(resetst);
resetst.executeUpdate();
}
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
Ниже приведен мой сервлет
@WebServlet("/forgotpassword")
public class ResetPasswordServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ResetPasswordServlet() {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String recipient = request.getParameter("email");
String uname = recipient;
CheckEmailForgotDao dao = new CheckEmailForgotDao();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if (dao.check(uname)) {
request.getRequestDispatcher("/SendEmailResetPassword").include(request, response);
} else {
request.getRequestDispatcher("index.html").include(request, response);
out.println("<script>document.getElementById('err-forgot').innerHTML= 'Email does not exist!'; </script>");
}
}
}
Ответ №1:
Наконец-то я могу это сделать. ниже приведен мой код.
-ForgotpasswordServlet -> CheckEmailForgot
-CheckEmailForgot -> проверить наличие электронной почты -> Сбросить пароль ->
-ForgotpasswordServlet -ForgotpasswordServlet -> Запрос пароля с помощью электронной почты -> EmailForgotDao
-EmailForgotDao -> SendEmail -> ForgotpasswordServlet -> Показать отправленное электронное письмо
@WebServlet("/forgotpassword")
public class ResetPasswordServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ResetPasswordServlet() {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String recipient = request.getParameter("email");
String uname = recipient;
CheckEmailForgotDao dao = new CheckEmailForgotDao();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if (dao.check(uname)) {
String url = "jdbc:mysql://localhost:3308/mywebapp";
String username = "root";
String password = "root";
String sql = "SELECT * FROM users WHERE email=?";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, username, password);
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, uname);
ResultSet rs = st.executeQuery();
if (rs.next()) {
String newpassword = rs.getString(3);
EmailForgotDao emaildao = new EmailForgotDao();
if (emaildao.sendemailforgot(uname, newpassword)) {
request.getRequestDispatcher("index.html").include(request, response);
out.println(
"<script>document.getElementById('msg-forgot').innerHTML= 'Reset password sent!'; </script>");
}
} else {
request.getRequestDispatcher("index.html").include(request, response);
out.println(
"<script>document.getElementById('msg-forgot').innerHTML= 'Error!'; </script>");
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
request.getRequestDispatcher("index.html").include(request, response);
out.println("<script>document.getElementById('msg-forgot').innerHTML= 'Email does not exist!';
</script>");
}
}
Приведенный выше сервлет использует ниже CheckEmailForgotDao, чтобы проверить, существует ли электронная почта или нет.
1. Если он существует, этот dao сбросит пароль и вернет true.
2. Если оно не существует, этот dao вернет false, и сервлет покажет, что электронная почта не завершается.
3. Если ниже CheckEmailForgotDao возвращает true, сервлет запросит и получит новый пароль для сброса.
4. Затем сервлет будет использовать это для вызова другого EmailForgotDao.
public class CheckEmailForgotDao{
String url = "jdbc:mysql://localhost:3308/mywebapp";
String username = "root";
String password = "root";
String sql = "SELECT * FROM users WHERE email=?";
public boolean check(String uname) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, username,password);
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, uname);
ResultSet rs = st.executeQuery();
if (rs.next()) {
String randomPassword = RandomStringUtils.randomAlphanumeric(10);
String resetsql = "UPDATE users SET password = ? WHERE email =
?";
PreparedStatement resetst = con.prepareStatement(resetsql);
resetst.setString(1, randomPassword);
resetst.setString(2, uname);
System.out.println(resetst);
resetst.executeUpdate();
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
Ниже EmailForgotDao отправит электронное письмо и вернет true. Затем сервлет покажет отправленный пароль сброса!
Если оно возвращает false, из-за ошибок, сервлет покажет ошибку.
public class EmailForgotDao {
public static class SMTPAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("youremail@gmail.com",
"yourpassword");
}
}
public boolean sendemailforgot(String uname, String newpassword) {
String d_uname = "youremail@gmail.com";
String d_password = "yourpassword";
String d_host = "smtp.gmail.com";
int d_port = 465;
String m_to = uname;
String m_from = "soemoesmarttoy1@gmail.com";
String m_subject = "Your Password has been reset";
String m_text = "Hi your new password is " newpassword;
String abc = "text/plain";
Properties props = new Properties();
SMTPAuthenticator auth = new SMTPAuthenticator();
Session ses = Session.getDefaultInstance(props, auth);
MimeMessage msg = new MimeMessage(ses);
try {
msg.setContent(m_text, abc);
msg.setSubject(m_subject);
msg.setFrom(new InternetAddress(m_from));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
Transport transport = ses.getTransport("smtps");
transport.connect(d_host, d_port, d_uname, d_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
return true;
} catch (Exception e) {
System.out.println(e);
}
return false;
}
}