91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Java項目中使用SpringSecurity實現輸入密碼錯誤過多鎖定用戶的功能

發布時間:2020-11-11 16:48:23 來源:億速云 閱讀:886 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關在Java項目中使用SpringSecurity實現輸入密碼錯誤過多鎖定用戶的功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Spring Security簡介

Spring Security是一個能夠為基于Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重復代碼的工作。

下面看下實例代碼:

第一步:創建 AuthenticationSuccessEventListener.Java  用來處理登錄成功的事件。

package com.dcits.yft.auth; 
import com.dcits.yft.system.dao.UserDao; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationListener; 
import org.springframework.security.authentication.event.AuthenticationSuccessEvent; 
import org.springframework.stereotype.Component; 
import java.util.Map; 
/** 
 * 登陸成功監聽 
 * 
 * @author Shaoj 3/2/2017. 
 */ 
@Component 
public class AuthenticationSuccessEventListener implements ApplicationListener<AuthenticationSuccessEvent> { 
  @Autowired 
  private UserDao userDao; 
  @Override 
  public void onApplicationEvent(AuthenticationSuccessEvent authenticationSuccessEvent) { 
    YftUserDetails yftUserDetails = (YftUserDetails) authenticationSuccessEvent.getAuthentication().getPrincipal(); 
    String account = yftUserDetails.getUsername(); 
    Map<String, Object> user = userDao.queryUserByAccount(account); 
    userDao.updateStatusByAccount(account, user.get("ENABLE").toString(), 0); 
  } 
}

第二步:新建AuthenticationFailureListener.java 用來處理登錄失敗的事件。

package com.dcits.yft.auth; 
import com.dcits.yft.system.dao.ParamsDao; 
import com.dcits.yft.system.dao.UserDao; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationListener; 
import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent; 
import org.springframework.stereotype.Component; 
import java.util.Map; 
/** 
 * 登陸失敗監聽 
 * 
 * @author Shaoj 3/2/2017. 
 */ 
@Component 
public class AuthenticationFailureListener implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> { 
  @Autowired 
  private UserDao userDao; 
  @Autowired 
  private ParamsDao paramsDao; 
  @Override 
  public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent authenticationFailureBadCredentialsEvent) { 
    String account = authenticationFailureBadCredentialsEvent.getAuthentication().getPrincipal().toString(); 
    Map<String, Object> user = userDao.queryUserByAccount(account); 
    if (user != null) { 
      // 用戶失敗次數 
      int fails = Integer.parseInt(user.get("FAILS").toString()); 
      fails++; 
      // 系統配置失敗次數 
      int FAILS_COUNT = Integer.parseInt(paramsDao.queryParamsValue("FAILS_COUNT")); 
      // 超出失敗次數,停用賬戶 
      if (fails >= FAILS_COUNT) { 
        userDao.updateStatusByAccount(account, "false", fails); 
        // 失敗次數++ 
      } else { 
        userDao.updateStatusByAccount(account, user.get("ENABLE").toString(), fails); 
      } 
    } 
  } 
} 

第三步:在UserDao.java中加入登錄狀態更新的代碼

/** 
 * 更新用戶登錄次數 
 * 
 * @param account 賬戶 
 * @param login_counts 登錄次數 
 * @return 
 */ 
public void updateLoginCounts(String account) { 
  daoUtil.update("update t_yft_user set login_counts = login_counts + 1 where account = &#63;", account); 
} 

第四步:數據庫中添加登錄次數字段

<span >alter table T_YFT_USER add (FAILS number(11) default 0 );</span> 
<span >comment on column T_YFT_USER.FAILS is '失敗嘗試次數';</span> 
[sql] view plain copy
INSERT INTO t_yft_params (ID,CODE,NAME,VALUE,UNIT,REMARK,CRT_DATE) 
 VALUES (66,'FAILS_COUNT','登陸嘗試次數','5','','',to_date('2017-03-02','yyyy-mm-dd')); 

關于在Java項目中使用SpringSecurity實現輸入密碼錯誤過多鎖定用戶的功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

家居| 荆门市| 平度市| 襄樊市| 临泽县| 龙口市| 台山市| 略阳县| 故城县| 金坛市| 郎溪县| 屯留县| 临漳县| 顺义区| 石泉县| 菏泽市| 建平县| 井研县| 阜南县| 从江县| 兴安盟| 德钦县| 休宁县| 革吉县| 翁牛特旗| 天全县| 苗栗市| 赤壁市| 南郑县| 四平市| 东山县| 六枝特区| 涞水县| 永康市| 北安市| 禹城市| 栖霞市| 五原县| 张家川| 舞钢市| 钟祥市|