需求:當用戶輸入密碼錯誤次數達到3次的時候,鎖定帳戶sql
1.1.咱們在什麼時候能夠得知用戶輸入密碼錯誤?
1.2.若是記錄用戶密碼錯誤次數?
1.3.如何實現帳戶鎖定功能?
首先,咱們獲取用戶密碼錯誤,能夠在登陸的時候能夠進行密碼斷定,便可得知密碼錯誤與否;其次,關於記錄密碼錯誤次數,我先想到的,是直接加一個計數器在登陸的Controller裏面,可是很容易反應過來,就是當用戶再次登陸的時候,不可獲取當前登陸用戶是否爲上次登陸密碼錯誤的用戶,因而我想到了在數據庫中加一個字段來記錄密碼錯誤次數;最後,實現帳戶鎖定,這個就很簡單了,直接在登陸的時候,根據用戶名查詢當前用戶的錯誤次數,若是大於2次,就直接拒絕登陸,並給到用戶提示。數據庫
在數據庫中加入記錄錯誤次數的字段
關於字段值的類型,均可以自定義,建議不用高精度(不必,用不着,也很差判斷),而後在對應的domain中加入字段,可自定義dom
//記錄錯誤次數的字段 private Integer errornum;
對用戶密碼錯誤次數進行判斷處理,若是達到了3次,就拒絕登陸ide
//若是當前用戶不爲空而且若是它的密碼錯誤次數大於2 if (employee != null && employee.getErrornum()>2) { //給前臺返回登陸結果爲false並給出提示 return new AjaxResult(false,"您的帳戶已經被鎖定,請毆打程序猿解鎖密碼"); }
而若是沒有達到3次,就在密碼錯誤的異常裏面根據用戶id進行修改密碼錯誤次數的操做,以達到計數的功能spa
//密碼每錯誤異常,那麼錯誤就加一次,根據id來修改用戶的密碼錯誤次數 employeeService.changeErrorTimes(employee.getId());
servicecode
void changeErrorTimes(Long id);
serviceimplblog
@Override public void changeErrorTimes(Long id) { employeeRepsitory.changeErrorTimes(id); }
這裏都是直接調方法就行事務
/** * 若是輸錯密碼,就直接將數據庫中的錯誤次數+1 * @param id */ @Transactional @Modifying @Query(nativeQuery = true,value = "update employee e set e.errornum = e.errornum + 1 where id = ?") void changeErrorTimes(Long id);
須要注意的是,這裏咱們必須加事務,不然修改操做不會成功,我我的習慣寫原生sql語句,由於Jpql要轉換一遍,以爲效率比較低,我的習慣。get
到這裏,咱們的密碼錯誤次數功能就完成了,不須要額外的jar包,只是簡單的操做數據庫和一些判斷,主要在於思路,但願個人分享可以幫到你。it