最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringSecurity顯示用戶賬號(hào)已被鎖定的原因及解決方案

 更新時(shí)間:2025年06月19日 11:04:16   作者:大智若愚Null  
SpringSecurity中用戶賬號(hào)被鎖定問(wèn)題源于UserDetails接口方法返回值錯(cuò)誤,解決方案是修正isAccountNonLocked()等方法的邏輯,確保返回正確狀態(tài),避免誤判賬戶鎖定,從而允許合法用戶登錄,下面給大家介紹SpringSecurity顯示用戶賬號(hào)已被鎖定的解決方案,感興趣的朋友一起看看吧

SpringSecurity顯示用戶賬號(hào)已被鎖定的解決方案

1.問(wèn)題出現(xiàn)前的工作

  • 在登錄頁(yè)面顯示用戶賬號(hào)已被鎖定之前,所做的工作有以下兩個(gè):

首先創(chuàng)建了LoginUser類實(shí)現(xiàn)UserDetail接口,UserDetail封裝了用戶的認(rèn)證信息

/*UserDetails 封裝了用戶信息*/
@Data
public class LoginUser implements UserDetails {
    /*將用戶的賬號(hào)密碼封裝成user對(duì)象,與數(shù)據(jù)庫(kù)對(duì)應(yīng)起來(lái)*/
    private User user;
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }
    @Override
    public String getPassword() {
        return user.getPassword();
    }
    @Override
    public String getUsername() {
        return user.getUsername();
    }
    @Override
    public boolean isAccountNonExpired() {
        return false;
    }
    @Override
    public boolean isAccountNonLocked() {
        return false;
    }
    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }
    @Override
    public boolean isEnabled() {
        return false;
    }
}

接著,創(chuàng)建MyUserDetailsService實(shí)現(xiàn)UserDetailsService接口,重寫方法,進(jìn)行認(rèn)證

@Component
public class MyUserDetailsService implements UserDetailsService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//        根據(jù)用戶名稱獲取用戶對(duì)象
        LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
        qw.eq(User::getUsername,username);
        User user = userMapper.selectOne(qw);
//        查不到  提示用戶名或密碼不存在
        if (StringUtils.isEmpty(user)){
            throw new RuntimeException("用戶名或密碼不存在");
        }
//       查到用戶   獲取用戶權(quán)限 進(jìn)行封裝
//        把用戶對(duì)象封裝到security中
        LoginUser loginUser = new LoginUser();
        loginUser.setUser(user);
        return loginUser;
    }
}

當(dāng)我重新運(yùn)行代碼,在頁(yè)面輸入網(wǎng)址后,出現(xiàn)以下提示:

2.問(wèn)題出現(xiàn)原因

出現(xiàn)原因:

重寫的UserDetails接口中的方法,有些默認(rèn)是false,如下:

   @Override
    public boolean isAccountNonExpired() {
        return false;
    }
    @Override
    public boolean isAccountNonLocked() {
        return false;
    }
    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }
    @Override
    public boolean isEnabled() {
        return false;
    }

各方法含義如下:

1. isAccountNonExpired()

  • 作用:檢查用戶賬戶是否未過(guò)期。
  • 返回boolean 類型,true 表示賬戶未過(guò)期,false 表示賬戶已過(guò)期。
  • 使用場(chǎng)景:如果賬戶已過(guò)期(返回 false),Spring Security 會(huì)拒絕該用戶的登錄請(qǐng)求。

2. isAccountNonLocked()

  • 作用:檢查用戶賬戶是否未被鎖定。
  • 返回boolean,true 表示賬戶未鎖定,false 表示賬戶被鎖定。
  • 使用場(chǎng)景:如果賬戶被鎖定(返回 false),用戶無(wú)法登錄,通常用于臨時(shí)禁用賬戶(如多次登錄失敗后鎖定賬戶)。

3. isCredentialsNonExpired()

  • 作用:檢查用戶的憑據(jù)(密碼)是否未過(guò)期。
  • 返回boolean,true 表示密碼未過(guò)期,false 表示密碼已過(guò)期。
  • 使用場(chǎng)景:如果密碼過(guò)期(返回 false),用戶可能需要強(qiáng)制修改密碼才能登錄。

4. isEnabled()

  • 作用:檢查用戶賬戶是否啟用。
  • 返回boolean,true 表示賬戶啟用,false 表示賬戶禁用。
  • 使用場(chǎng)景:如果賬戶被禁用(返回 false),用戶無(wú)法登錄,通常用于永久禁用賬戶(如管理員手動(dòng)禁用)。

3.解決方案

將UserDetails實(shí)現(xiàn)類方法中的false都改為true,內(nèi)容如下:

@Data
public class LoginUser implements UserDetails {
    /*將用戶的賬號(hào)密碼封裝成user對(duì)象,與數(shù)據(jù)庫(kù)對(duì)應(yīng)起來(lái)*/
    private User user;
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }
    @Override
    public String getPassword() {
        return user.getPassword();
    }
    @Override
    public String

補(bǔ)充:SpringSecurity 用戶帳號(hào)已被鎖定

SpringSecurity 用戶帳號(hào)已被鎖定

01 異常發(fā)生場(chǎng)景

  • 當(dāng)我自定義登錄接口時(shí)
  • 以下是我的UserDetailsService和UserDetails接口的實(shí)現(xiàn)類
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    private MsUserServiceImp msUserServiceImp;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        //使用mybatis-plus,獲取到賬號(hào)密碼數(shù)據(jù)
        LambdaQueryWrapper<MsUser> qw=new LambdaQueryWrapper<>();
        qw.eq(MsUser::getUsername,username);
        MsUser user = msUserServiceImp.getOne(qw);

        LoginUser loginUser = new LoginUser();
        loginUser.setMsUser(user);

        return loginUser;
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginUser implements UserDetails {
    private MsUser msUser;
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }
    @Override
    public String getPassword() {
        return msUser.getPassword();
    }
    @Override
    public String getUsername() {
        return msUser.getUsername();
    }
    @Override
    public boolean isAccountNonExpired() {
        return false;
    }
    @Override
    public boolean isAccountNonLocked() {
        return false;
    }
    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }
    @Override
    public boolean isEnabled() {
        return false;
    }
}

02 問(wèn)題發(fā)生的原因

  • 重寫的UserDetails類默認(rèn)方法返回值為false

1.isAccountNonExpired()

  • 判斷帳戶是否過(guò)期

2.isAccountNonLocked()

  • 判斷帳戶是否鎖定

3.isCredentialsNonExpired()

  • 憑據(jù)是否過(guò)期,就是登錄時(shí)間到?jīng)]到

4.isEnabled()

  • 是否啟動(dòng)

03 解決方式

  • 將UserDetails接口的實(shí)現(xiàn)類里上述方法,也就是所有方法設(shè)置為true就可以避免被鎖定了

到此這篇關(guān)于SpringSecurity顯示用戶賬號(hào)已被鎖定的原因及解決方案的文章就介紹到這了,更多相關(guān)SpringSecurity用戶已被鎖定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id

    如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id

    這篇文章主要介紹了如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java線程池參數(shù)自定義設(shè)置詳解

    java線程池參數(shù)自定義設(shè)置詳解

    這篇文章主要為大家介紹了java線程池參數(shù)自定義設(shè)置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • JAVA抽象類,接口,內(nèi)部類詳解

    JAVA抽象類,接口,內(nèi)部類詳解

    這篇文章主要給大家介紹了關(guān)于Java中抽象類,接口,內(nèi)部類的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • java實(shí)現(xiàn)水果超市管理系統(tǒng)

    java實(shí)現(xiàn)水果超市管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)水果超市管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • mybatis插入后返回主鍵id的3種方式圖解

    mybatis插入后返回主鍵id的3種方式圖解

    這篇文章主要給大家介紹了關(guān)于mybatis插入后返回主鍵id的3種方式,很多時(shí)候,在向數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí),需要保留插入數(shù)據(jù)的,以便進(jìn)行后續(xù)的操作或者將存入其他表作為外鍵,需要的朋友可以參考下
    2023-08-08
  • Spring MVC接口防數(shù)據(jù)篡改和重復(fù)提交

    Spring MVC接口防數(shù)據(jù)篡改和重復(fù)提交

    這篇文章主要為大家詳細(xì)介紹了Spring MVC接口防數(shù)據(jù)篡改和重復(fù)提交,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • java中的正則操作方法總結(jié)

    java中的正則操作方法總結(jié)

    關(guān)于正則表達(dá)式的使用,更多的是自己的經(jīng)驗(yàn),有興趣可以參閱相關(guān)書籍。這里主要寫一下java中的正則操作方法
    2013-10-10
  • Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程

    Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java如何實(shí)現(xiàn)判斷文件的真實(shí)類型

    java如何實(shí)現(xiàn)判斷文件的真實(shí)類型

    本篇文章主要介紹了java如何實(shí)現(xiàn)判斷文件的真實(shí)類型,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 解決MyEclipse中的Building workspace問(wèn)題的三個(gè)方法

    解決MyEclipse中的Building workspace問(wèn)題的三個(gè)方法

    這篇文章主要介紹了解決MyEclipse中的Building workspace問(wèn)題的三個(gè)方法,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

泉州市| 乌拉特中旗| 家居| 封开县| 壶关县| 资源县| 上饶县| 阿坝| 吴旗县| 成都市| 福清市| 乐山市| 南部县| 武隆县| 阳城县| 大同市| 嘉鱼县| 乾安县| 岢岚县| 柏乡县| 天镇县| 维西| 宿迁市| 明水县| 敦化市| 舞阳县| 天水市| 凉山| 遵义市| 于都县| 睢宁县| 花莲市| 莒南县| 汕头市| 阳西县| 罗山县| 手游| 安新县| 广元市| 仙桃市| 阿勒泰市|