發送郵件→連接郵件裏的URL→修改密碼
重點就是如何生成這個url和如何解析這個url.
需要注意的是一個url只能修改一次密碼,當同一帳號發送多封郵件,只有最後一封郵件的url 是有效的
初步想法這個url有3個參數:用戶名,過期時間,數字簽名.
數字簽名 = MD5(用戶名+'$'+過期時間+密鑰key)
解析這個url的時候先驗證數字簽名,再驗證過期時間。
這個方法的弊端在於如果誰知道密鑰key,就能修改任意用戶密碼。
爲了保證這個密鑰key的安全性,密鑰key在應用每次啓動的時候隨機生成。
,還剩一個問題,就是一個url只能修改一次密碼。
這樣的話就需要每次修改完這個密碼以後,給做一個標記(在內存中保存用戶名, 過期時間,數字簽名),然後現在每次解析url的時候先驗證簽名,
然後驗證該url是否修改過密碼,最後驗證過期時間。
內存裏的標記在超過過期時間以後是需要清除的。需要做一個定時任務一天清除以下內存裏的
過期標記。好象這樣就差不多拉。
然後開始開發,開發完以後本機跑的沒啥問題。
忽然發現一個問題,生產環境下是多個應用的集羣環境,這樣的話多個應用隨機生成的
密鑰key是不一樣的。
那這樣密鑰key的生成後,只有放到數據庫比較好拉。
最後的方案:
數字簽名 = MD5(用戶名+'$'+過期時間+密鑰key)
數據庫字段(用戶名(主鍵),密鑰key,過期時間)
url參數(用戶名,數字簽名)
密鑰key的生成:在每一個用戶找回密碼時候爲這個用戶生成一個密鑰key
然後生成過期時間,生成數字簽名,生成url,發送郵件.
saveOrUpdate(用戶名,密鑰key,過期時間)
解析url:首先根據用戶名從數據庫中查找出密鑰key和過期時間,沒有則表示該請求
是僞造的或者過期的,然後驗證簽名,驗證過期時間,都驗證通過,就可以修改密碼,
密碼修改完以後,刪除數據庫中的記錄。
還需要加一個定時任務,刪除數據庫中當前時間大於過期時間的記錄。
通過郵箱找回密碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
解決strus2中文亂碼
小锋007
2018-08-27 19:11:31
struts2配置之全局result及異常處理
小锋007
2018-08-27 19:11:29
Windows Server 的IIS6和Tomcat6共用80端口,實現發佈項目
小锋007
2018-08-27 19:11:28
文本框輸入驗證:只能輸入數字和小數點
小锋007
2018-08-27 19:11:17
jsp中上傳圖片時的即時顯示效果
小锋007
2018-08-27 19:11:17
SpringSecurity初體驗
小锋007
2018-08-27 19:11:17
JS控制文本框textarea輸入字數限制
小锋007
2018-08-27 19:11:16
表單的js驗證框架,只提供提示信息及正則表達式即可自動驗證及提示
小锋007
2018-08-27 19:11:16
<a>標籤-超鏈接中使用confirm方法
小锋007
2018-08-27 19:11:16
java 自定義標籤
小锋007
2018-08-27 19:11:16
圖片上傳時即時顯示2
小锋007
2018-08-27 19:11:16
鼠標劃過時整行變色代碼
小锋007
2018-08-27 19:11:16
點擊按鈕——網頁返回頂部代碼
小锋007
2018-08-27 19:11:16