1. 程式人生 > >基於SpringBoot的密碼找回功能實現

基於SpringBoot的密碼找回功能實現

tro uri md5 之前 nbsp 做的 我們 info 刪除

前言

最近在做自己的項目,其中有一個大家都知道的功能就是找回密碼。這裏分享一下我的做法,因為這中間實在有太多坑了。所以記錄一下。

使用技術:SpringBoot1.5.6、JPA、SpringSecurity4、MySQL、BootStrap等等等。。。

密碼找回流程圖:

首先,先來給大家介紹一下密碼找回的基本原理:
技術分享圖片

接著,按照流程圖我們來實現一下首先第一步是點擊跳轉到找回密碼界面:我用的是這種方式大家隨意

技術分享圖片

技術分享圖片

找回密碼界面為:

技術分享圖片

第二步:判斷輸入的賬戶是否有效

技術分享圖片

下面是如果存在的話就生成URL鏈接:

技術分享圖片

backPassword:

技術分享圖片

第三步:判斷重置表中是否有該賬戶,重置表是一張保存URL的表(過期時間、sid、賬戶信息等)

技術分享圖片

技術分享圖片

這樣做的目的是:如果存在該條數據而不去刪除的話,下次找回密碼的時候就會生成2條賬戶一樣,但是sid不一樣的數據,這樣的壞處是:發郵件的時候不知道該返回哪個URL,因為有2條URL

第四步:郵件發送

技術分享圖片

我們先來看下效果:

技術分享圖片

接下來就是重要部分:如何處理驗證鏈接,首先我們可以看到/user/reset_password這個是一個請求後面是它的參數,所以切記!

我們要寫一個請求,路由就是/user/reset_password,與此同時需要在SpringSecurity中對該請求放行。驗證的過程是這樣的:首先把從請求傳過來的sid和userName(也就是郵箱)和數據庫中的sid和account比對,同時還要對比時間是否是在有效期30分鐘內,如果這些都滿足的話就返回true,否則為false。需要註意的是:這裏有一個替換是空格替換為+號,是因為HTML傳給後臺的時候+號被自動轉為了空格,如果不替換為+號的話就會一直提示驗證失敗!!!一旦返回true的話就代表驗證URL通過,就跳轉到重置密碼界面:

技術分享圖片

技術分享圖片

註意:我這裏沒有對驗證進行優化,不應該有這麽多的if else嵌套

對請求路由進行放行:如果不放行的話點擊鏈接就會跳轉至登錄界面

技術分享圖片

跳轉到重置頁面,如果我們這時2次輸入的密碼不一致就會有如下的提示,我這個是使用JS做的校驗:

技術分享圖片

當然為了嚴謹我們在後臺也進行2次密碼校驗,如果輸入的是一致的話才去更新信息,不一致的話就返回錯誤

技術分享圖片

這裏倒是沒什麽,就是註意下在密碼保存到數據庫之前,使用MD5+鹽加密一下,之後保存就可以,我們來看下2次密碼輸入正確的效果:頁面提示修改成功後臺無報錯,這時候使用新密碼就可以進行登錄

技術分享圖片

基於SpringBoot的密碼找回功能實現