java web通過163郵箱重置登入密碼
許多開發專案中都需要用到郵箱實現找回密碼或者重置密碼的功能,就是改變資料庫中儲存的密碼。根據在網上找的一些Javaweb通過郵箱找回密碼的例子並和帶我的研究生學長一起改了改,也成功開發了一個重置密碼的小程式。
開發工具:myeclipse10。MySQL資料庫。
專案結構:
password.dat裡面存放的是163郵箱的授權碼,不是登入密碼,關於授權碼可以自行百度瞭解下,並且在執行程式是,163郵箱要處於登入狀態
下面將各個包中的程式碼包中的程式碼粘貼出來
com.ningmeng.util
package com.ningmeng.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DbUtil {
private String url="jdbc:mysql://localhost:3306/db-jsp";
private String user="root";
private String password="123";
private String driver="com.mysql.jdbc.Driver" ;
public Connection getCon() throws Exception{
Class.forName(driver);
Connection con=DriverManager.getConnection(url, user, password);
return con;
}
public static void getClose(Connection con) throws SQLException{
if(con!=null){
con.close();
}
}
}
org.study.accountactivate.dao
package org.study.accountactivate.dao;
import org.study.accountactivate.domail.User;
public interface UserDao {
User findUserByNameOrEmail(String nameOrEmail);
boolean UpdateByName(String userName,String newPassword);
}
org.study.accountactivate.dao.impl
package org.study.accountactivate.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import org.study.accountactivate.dao.UserDao;
import org.study.accountactivate.domail.User;
import com.ningmeng.util.DbUtil;
public class UserDaoImpl implements UserDao {
private static UserDaoImpl instance = new UserDaoImpl();
private UserDaoImpl() {}
public static UserDaoImpl getInstance() {
return instance;
}
Map<Integer,User> users = new HashMap<Integer, User>();
int nextId = 1;
@Override
public User findUserByNameOrEmail(String nameOrEmail) {
User user=new User();
DbUtil db=new DbUtil();
String sql="select * from user where email=?";
PreparedStatement ps;
try{
Connection conn=db.getCon();
ps=conn.prepareStatement(sql);
ps.setString(1, nameOrEmail);
ResultSet rs=ps.executeQuery();
if(rs.next()){
user.setUserName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setEmail(rs.getString(5));
}
return user;
}catch(SQLException e)
{
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public boolean UpdateByName(String userName,String newPassword){
boolean flag=false;
DbUtil db=new DbUtil();
String sql="update user set password=? where userName=?";
PreparedStatement ps;
try{
Connection conn=db.getCon();
ps=conn.prepareStatement(sql);
ps.setString(1,newPassword);
ps.setString(2, userName);
flag=ps.executeUpdate()>0;
}catch(SQLException e)
{
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
}
org.study.accountactivate.domail
package org.study.accountactivate.domail;
public class User {
// 使用者名稱
private String userName;
// 密碼
private String password;
// email
private String email;
// 是否啟用
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
org.study.accountactivate.util
package org.study.accountactivate.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.study.accountactivate.domail.User;
public class EmailUtils {
private static final String FROM = "[email protected]";
/**
* 傳送重設密碼連結的郵件
*/
public static void sendResetPasswordEmail(User user ,String userEmail) {
Session session = getSession();
MimeMessage message = new MimeMessage(session);
try {
message.setSubject("找回您的帳戶與密碼");
message.setSentDate(new Date());
message.setFrom(new InternetAddress(FROM));
message.setRecipient(RecipientType.TO, new InternetAddress(userEmail));
message.setContent("要使用新的密碼, 請使用以下連結啟用密碼:<br/><a href='" + GenerateLinkUtils.generateResetPwdLink(user) +"'>點選重新設定密碼</a>","text/html;charset=utf-8");
// 傳送郵件
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Session getSession() {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.163.com");
props.setProperty("mail.smtp.port", "25");
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
String password = null;
InputStream is = EmailUtils.class.getResourceAsStream("password.dat");
byte[] b = new byte[1024];
try {
int len = is.read(b);
password = new String(b,0,len);
} catch (IOException e) {
e.printStackTrace();
}
return new PasswordAuthentication(FROM, password);
}
});
return session;
}
}
org.study.accountactivate.util
package org.study.accountactivate.util;
import org.study.accountactivate.domail.User;
/**
* 生成帳戶啟用、重新設定密碼的連結
*/
public class GenerateLinkUtils {
/**
* 生成重設密碼的連結
*/
public static String generateResetPwdLink(User user) {
return "http://localhost:8080/dddd/resetPassword.jsp";
}
}
org.study.accountactivate.web.servlet
package org.study.accountactivate.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.study.accountactivate.dao.UserDao;
import org.study.accountactivate.dao.impl.UserDaoImpl;
import org.study.accountactivate.domail.User;
import org.study.accountactivate.util.EmailUtils;
/**
* 傳送重設密碼申請的連結
*/
public class ForgotPwdServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
String Email = request.getParameter("Email");
UserDao userDao = UserDaoImpl.getInstance();
User user = userDao.findUserByNameOrEmail(Email);
if (user == null) {
request.setAttribute("errorMsg", Email + ",不存在!");
request.getRequestDispatcher("/forgotPwd.jsp").forward(request, response);
return;
}
// 傳送重新設定密碼的連結
EmailUtils.sendResetPasswordEmail(user,Email);
request.setAttribute("sendMailMsg", "您的申請已提交成功,請檢視您的"+user.getEmail()+"郵箱。");
request.getRequestDispatcher("/forgotPwdSuccess.jsp").forward(request, response);
}
}
org.study.accountactivate.web.servlet
package org.study.accountactivate.web.servlet;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.study.accountactivate.dao.UserDao;
import org.study.accountactivate.dao.impl.UserDaoImpl;
import org.study.accountactivate.domail.User;
/**
* 重新設定密碼
*/
public class ResetPasswordServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
String userName = request.getParameter("userName");
String newPassword = request.getParameter("newPassword");
String newPassword2 = request.getParameter("newPassword2");
Map<String,String> errors = new HashMap<String, String>();
if (newPassword == null || "".equals(newPassword)) {
errors.put("newPassword", "新密碼不能為空!");
}
if (newPassword2 == null || "".equals(newPassword2)) {
errors.put("newPassword2", "確認新密碼不能為空!");
}
if (!newPassword.equals(newPassword2)) {
errors.put("passwordError", "兩次輸入的密碼不一致!");
}
if (!errors.isEmpty()) {
request.setAttribute("errors", errors);
request.getRequestDispatcher("/resetPassword?userName=" + userName).forward(request, response);
return;
}
UserDao userDao = UserDaoImpl.getInstance();
boolean flag = userDao.UpdateByName(userName,newPassword);
request.getRequestDispatcher("/resetPasswordSuccess.jsp").forward(request, response);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description>找回密碼頁面</description>
<display-name>ForgotPwdUIServlet</display-name>
<servlet-name>ForgotPwdUIServlet</servlet-name>
<servlet-class>org.study.accountactivate.web.servlet.ForgotPwdUIServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ForgotPwdUIServlet</servlet-name>
<url-pattern>/forgotPwdUI</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>ForgotPwdServlet</display-name>
<servlet-name>ForgotPwdServlet</servlet-name>
<servlet-class>org.study.accountactivate.web.servlet.ForgotPwdServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ForgotPwdServlet</servlet-name>
<url-pattern>/forgotPwd</url-pattern>
</servlet-mapping>
<servlet>
<description>重新設定密碼</description>
<display-name>ResetPasswordServlet</display-name>
<servlet-name>ResetPasswordServlet</servlet-name>
<servlet-class>org.study.accountactivate.web.servlet.ResetPasswordServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResetPasswordServlet</servlet-name>
<url-pattern>/resetPassword</url-pattern>
</servlet-mapping>
<servlet>
<description>重新設定密碼頁面</description>
<display-name>ResetPasswordUIServlet</display-name>
<servlet-name>ResetPasswordUIServlet</servlet-name>
<servlet-class>org.study.accountactivate.web.servlet.ResetPasswordUIServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResetPasswordUIServlet</servlet-name>
<url-pattern>/resetPasswordUI</url-pattern>
</servlet-mapping>
</web-app>
forgotPwd.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>重設密碼申請</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/forgotPwd" method="post">
<span style="color: red">${requestScope.sendMailMsg}</span>
郵箱:<input type="text" name="Email" /><span style="color: red">${requestScope.errorMsg}</span><br/>
<input type="submit" value="提交" /><a href=""></a>
</form>
</body>
</html>
forgotPwdSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>重新設定密碼申請成功</title>
</head>
<body>
<h3>${requestScope.sendMailMsg}</h3>
</body>
</html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陸</title>
<style type="text/css">
.error {
color: red;
padding-left:2px;
}
</style>
</head>
<body>
<a href="${pageContext.request.contextPath}/forgotPwd.jsp">忘記密碼?</a>
</body>
</body>
</html>
resetPassword.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>重新設定密碼</title>
<style type="text/css">
.error {
color: red;
padding-left:5px;
}
</style>
</head>
<body>
<form action="${pageContext.request.contextPath}/resetPassword" method="post">
<span class="error" style="display: block;">${errors.passwordError}</span>
使用者名稱:<input type="text" name="userName" value="${userName}" /><br/>
新密碼:<input type="password" name="newPassword" /><span class="error">${errors.newPassword }</span><br/>
確認新密碼:<input type="password" name="newPassword2"/><span class="error">${errors.newPassword2 }</span><br/>
<input type="submit" value="修改" />
</form>
</body>
</html>
resetPasswordSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>密碼修改成功</title>
</head>
<body>
<h3>密碼修改成功!</h3><a href="${pageContext.request.contextPath }/login">登入</a>
</body>
</html>
資料庫設計
相關推薦
java web通過163郵箱重置登入密碼
許多開發專案中都需要用到郵箱實現找回密碼或者重置密碼的功能,就是改變資料庫中儲存的密碼。根據在網上找的一些Javaweb通過郵箱找回密碼的例子並和帶我的研究生學長一起改了改,也成功開發了一個重置密碼的小程式。 開發工具:myeclipse10。MySQL
163郵箱設置smtp密碼步驟
-o .com 客戶 title 獲取 clas 操作 51cto 申請 郵件發送通知用戶操作,需申請一個163郵箱,並獲取到smtp密碼,獲取smtp密碼步驟如下1、在網易163郵箱首頁,進入如下圖所示的“郵箱中心” 2、點擊添加其他郵箱,然
java web通過openoffice實現文件網頁預覽(類似百度文庫)
最近研究了一下在網頁上預覽文件(包括office文件和txt、pdf),發現用openoffice+FlexPlayer實現比較理想,就參考了https://blog.csdn.net/ITBigGod/article/details/80300177#commentBox這個部落格自己研究了一下。原始碼
Java Web開發 基於HttpServlet的使用者登入網站 例項
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
django關於實現找回密碼功能-----通過郵件來重置密碼
首先要呼叫傳送郵件的函式,要成功的傳送跳轉地址,這裡的跳轉地址要儲存在資料庫中,以便以後可以知道是哪個賬號要進行重置密碼 # _*_ coding: utf-8 _*_ __author__ = 'LelandYan' __date__ = '2018/9/
Java基礎之Java Web中 什麼是重定向和轉發?如何選擇使用重定向還是轉發?
1.重定向和轉發的區別是什麼? 重定向是兩次請求,轉發是一次請求,因此轉發的速度要快於重定向。 重定向之後位址列上的地址會發生變化,變化成第二次請求的地址,轉發之後位址列上的地址不會變化,還是第一次請求的地址。 重點:重定向和請求轉發之後的程式碼都會執行,直到方法結束或者遇到
java web 筆記(二):登入認證系統
講完cookie和session(沒看過前一篇部落格的建議先看前一篇),現在簡單討論下登入系統。 簡單的單獨專案登入系統可以做的很簡單,只是用cookie和session就能實現;複雜的登入系統如SSO等可以做的很複雜,需要考慮使用各種認證防資料捕獲等情況。
JAVA-WEB Servlet 做簡單的使用者登入
假設資料庫已經添加了使用者表在工程webcontent下準備一個登入頁面login.html<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>lo
Java Web開發如何在註冊和登入時對使用者名稱和密碼進行驗證?
1 註冊時,對註冊的手機號和密碼驗證: 手機號碼為常用的移動,聯通,電訊號 密碼為數字和字母的組合,切長度不能少於8位 方案 在提交註冊資訊時,用Ajax提交手機號和密碼到Servlet進行驗證 程式
email郵箱,巧用163郵箱設置妙招,爭做郵箱達人
刪除 控制 tom 圖片 h5小遊戲 功能 進行 補充 郵件撤回 email郵箱, 巧用163郵箱設置妙招,爭做郵箱達人 說到email郵箱,極易聯想到抱著電腦忙碌處理不完的郵件的場景,這幾乎是所有工作者為之頭痛的事。經分析,導致效率低耗用長時間處理郵件,主要原因是&quo
什麼是我的java.net.SocketException:連線重置?
在使用HttpClient呼叫後臺resetful服務時,在使用HttpClient呼叫後臺resetful服務時,“Connection reset”是一個比較常見的問題,有同學跟我私信說被這個問題
java web session+cookie實現使用者自動登入
在之前的博文中介紹了專案中防止使用者重複登入的方案及解決非法退出異常的處理方法——監聽瀏覽器關閉事件onbeforeunload,傳送ajax請求到伺服器端執行正常退出程式,以避免使用者被鎖死的情況。然後在實際的測試中發現,有些瀏覽器如火狐是無法監聽到befor
Java web工程判斷使用者是否重複登入
前幾天,網上找了些朋友的資料,做了一個小功能,驗證使用者是否重複登入。 原理就是:每一個使用者,登入前有一個驗證,當第一次登入時,會把其session資訊,新增到一個特定的靜態變數中。當第二次登入時,驗證到靜態變數中存在該使用者的資訊,就表示為重複登入。 jsp程式碼,一個
java 程式碼實現163郵箱傳送郵件到QQ郵箱
1.建立一個使用者類,來接收發送郵件的郵箱地址和授權密碼(需要注意的是,這裡的密碼不是正常使用郵箱的登陸密碼,而是客戶端生成的另一個專門的授權碼 ,這裡需要開啟相應的傳送郵件的服務,這裡開啟的是pop3/smtp服務)package appsoft.cd.applicat
java web 通過ip獲取當前地理位置
public static void main(String[] args) throws Exception{ // A File object pointing to your GeoIP
java實現通過QQ郵箱傳送啟用郵件 springBoot
使用者郵件啟用 通過QQ郵箱傳送啟用郵件 soringBoot 本文主要介紹了使用java 呼叫郵箱傳送郵件的功能 首先新建一個springboot專案 pom依賴如下 <parent> <groupId>org.springframewor
laravel5.5 郵箱重置原始碼解析
場景: laravel原始碼學習觀摩, 選了一段分析一下,也遇到一些問題 mark一下分析: 傳送重置密碼的連線 App\Http\Controllers\Auth\[email protected] 傳送這種連線之前 肯定是需要檢查下
Java Web 通過CKEditor實現線上編譯器
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transition
TortoiseSVN更換或重置登入使用者
TortoiseSVN 安裝好初次使用後,以後登入都是默認了初次登入時的使用者帳號。去了新公司,電腦上還有svn,不料提交程式碼時沒注意,使用了之前的人的賬號和密碼, 修改登入使用者的方法: 1,開啟SVN的settings 2,找到Saved Data欄,右側Aut
通過label標籤重置input[radio]樣式
一、基於預設的input[radio]標籤很醜,很多時候都需要重寫樣式,下面就介紹下通過label標籤重置input[radio]標籤的方法; 二、準備首先我們需要給lable標籤繫結input,然後