1、使用者名稱保證唯一性
這個應該很容易理解,對於乙個系統來說,使用者名稱是唯一的,不可重複,如果我們在註冊使用者時,比如隨便起了乙個使用者名稱doudouchong
這樣的使用者。合理的方式是,在輸入註冊使用者名稱後,頁面應該馬上呼叫乙個介面,即查詢當前使用者名稱是否占用,如果占用應該提示已註冊。在這樣的前提下,就能保證使用者名稱的唯一了。
2、密碼入庫要用暗文
在註冊使用者時,比如我們將註冊的使用者doudouchong
密碼為123
,這樣的資訊儲存到資料庫使用者表中,但是合理的情況下,你不能把這個密碼明文123
儲存到資料庫中,你應該把暗文儲存到資料庫中,密碼加密後的暗文,可以有多種方法來做到,比如我們專案中是用的下邊的這個類:
package
microservice.fpzj.core.util;
import
org.apache.shiro.crypto.hash.******hash;
import
org.apache.shiro.util.bytesource;
public
class
passwordutil
public
void
setha****erations
(int
ha****erations)
//加密:輸入明文得到密文
public
string encodepassword
(string pwd, string salt)
public
boolean
verifypassword
(string targetpassword, string pwd, string salt)else}}
以上的encodepassword
方法,即是加密密碼明文的方法,該方法的引數除了明文密碼,還有salt
,這個是鹽,通過這個鹽,可以對密碼進一步加密,而這個鹽,這裡其實使用的是userid
,是通過uuid
獲取的乙個隨機的字串,作為使用者表記錄主鍵userid
的值,然後它們兩個通過encodepassword
方法生成密碼暗文,大體意思如下圖所示:
通過傳入123
和生成的uuid
值d9970477fb2349b984b1c98b8e559a91
兩個引數,呼叫encodepassword
方法,即生成了密碼暗文b7331bcddf29abef3a079ea0cb678f0e
,然後將該暗文作為使用者表中的密碼值儲存到使用者表中即可。
3、密碼驗證的邏輯
由於密碼存入到使用者表中是暗文,所以在驗證中,不要忘記首先將使用者輸入的密碼123
轉換成暗文,然後再雨資料庫使用者表中儲存的密碼值進行比較。方法也是呼叫第二步中的encodepassword
,但是因為這個方法還需要鹽,即salt
,而這個salt
值又來自於使用者表中當前使用者名稱的主鍵userid
值,所以,還要根據使用者名稱查詢到使用者物件,取出userid
值,作為salt
,然後呼叫encodepassword
方法,這樣才能轉換成真正的密碼暗文,如果salt
不對,生成的密碼暗文肯定是不對的。
關於使用者登入和許可權驗證功能的實現步驟(八)
關於shiro框架中使用者多站點登入的標識欄位的位置 首先再回顧下,我們整個使用者 角色 功能配置上所要建立的表 通過以上表實現乙個使用者多站點登入的功能,但是關於siteid放置的位置還需要說明一下我自己的看法。1 不能放到使用者表 毫無疑問,無法實現乙個使用者對應多個站點的功能。1 可以放到功能...
Django CBV中的使用者登入許可權驗證
1.cbv模式中,由於view中的檢視為類,所有不能像fbv一樣使用裝飾器,故可以繼承乙個自定義的類,這個類的功能的驗證使用者有沒有登入,需要登入才能訪問這個類 2.utils資料夾中建立mixin utils.py檔案 3.mixin utils.py from django.contrib.au...
django 個人部落格登入及許可權驗證功能的實現
完成註冊後隨即開始進行登入,登入後頁面顯示登入者的名稱 實現如下 前端頁面html,對session進行判斷,有值則顯示登入者的名字 無值則顯示註冊字樣 後台views函式 首先對驗證碼進行驗證 驗證成功後將前端傳入的值放入form進行驗證 驗證成功後從資料庫中取值進行驗證,驗證成功後將所有的資訊全...