關於使用者登入和許可權驗證功能的實現步驟(五)

2021-08-22 01:15:34 字數 1844 閱讀 3039

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和生成的uuidd9970477fb2349b984b1c98b8e559a91兩個引數,呼叫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進行驗證 驗證成功後從資料庫中取值進行驗證,驗證成功後將所有的資訊全...