写一个可以实现忘记密码重置密码功能的代码
时间: 2024-03-16 12:47:52 浏览: 26
以下是一个简单的 JSP 实现忘记密码重置密码功能的代码示例:
忘记密码页面(forget_pwd.jsp):
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>忘记密码</title>
</head>
<body>
<h1>忘记密码</h1>
<form action="reset_pwd.jsp" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required><br>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" required><br>
<button type="submit">提交</button>
</form>
</body>
</html>
```
重置密码页面(reset_pwd.jsp):
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Random" %>
<%@ page import="java.security.MessageDigest" %>
<%@ page import="java.security.NoSuchAlgorithmException" %>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>重置密码</title>
</head>
<body>
<h1>重置密码</h1>
<%
// 获取用户名和邮箱
String username = request.getParameter("username");
String email = request.getParameter("email");
// 验证用户名和邮箱是否正确
boolean valid = false;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM user WHERE username='" + username + "' AND email='" + email + "'";
ResultSet rs = stmt.executeQuery(sql);
valid = rs.next();
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
if (valid) {
// 生成随机密码
String password = generateRandomPassword(8);
// 更新密码
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
Statement stmt = conn.createStatement();
String sql = "UPDATE user SET password='" + hashPassword(password) + "' WHERE username='" + username + "'";
int rows = stmt.executeUpdate(sql);
stmt.close();
conn.close();
if (rows == 1) {
// 发送邮件
String subject = "重置密码";
String message = "您的新密码是:" + password;
sendEmail(email, subject, message);
out.println("<p>新密码已发送到您的邮箱,请注意查收。</p>");
} else {
out.println("<p>更新密码失败。</p>");
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
out.println("<p>用户名或邮箱错误。</p>");
}
// 生成指定长度的随机密码
String generateRandomPassword(int len) {
String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
StringBuilder sb = new StringBuilder();
Random rnd = new Random();
for (int i = 0; i < len; i++) {
sb.append(chars.charAt(rnd.nextInt(chars.length())));
}
return sb.toString();
}
// 对密码进行 MD5 加密
String hashPassword(String password) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte[] bytes = md.digest();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
// 发送邮件
void sendEmail(String to, String subject, String message) {
// TODO: 发送邮件的代码
}
%>
</body>
</html>
```
以上代码仅供参考,需要根据实际情况进行修改和完善。