SpringSecurity中的UserDetails和UserDetailsService接口詳解
UserDetails
UserDetails 在 Spring Security 框架中主要擔(dān)任獲取用戶(hù)信息的接口,通過(guò)該接口就能拿到用戶(hù)的信息和驗(yàn)證用戶(hù)的信息,這些信息在下面的方法中會(huì)有講述。
UserDetails 接口中各個(gè)方法詳解
| 方法名 | 作用 |
| Collection<? extends GrantedAuthority> getAuthorities() | 授予用戶(hù)的權(quán)限 |
| String getPassword() | 用戶(hù)的密碼(當(dāng)前密碼是經(jīng)過(guò)加密后的) |
| String getUsername() | 用戶(hù)名 |
| boolean isAccountNonExpired() | 用戶(hù)的賬號(hào)是否過(guò)期 true 未過(guò)期 false 已過(guò)期 |
| boolean isAccountNonLocked() | 用戶(hù)的賬號(hào)是否被鎖定 true 未被鎖定 false 被鎖定 |
| boolean isCredentialsNonExpired() | 用戶(hù)的憑據(jù)(密碼)是否已過(guò)期 true 未過(guò)期 false 已過(guò)期 |
| boolean isAccountNonExpired() | 用戶(hù)是否啟用 true 啟用 false 禁用 |
UserDetailsService
UserDetailsService 在 Spring Security 中主要承擔(dān)查詢(xún)系統(tǒng)內(nèi)用戶(hù)、驗(yàn)證密碼、封裝用戶(hù)信息和角色權(quán)限。
大白話(huà)就是你寫(xiě)一個(gè)實(shí)現(xiàn)類(lèi)實(shí)現(xiàn) UserDetailsService 接口,在這個(gè)實(shí)現(xiàn)類(lèi)中去查詢(xún)數(shù)據(jù)庫(kù)中的用戶(hù),并封裝成一個(gè)實(shí)現(xiàn)了 UserDetails 接口的實(shí)體類(lèi)模型。
UserDetailsService 具體操作
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.security.mysql.dao.UserDao;
import com.security.mysql.entity.UserEntity;
import com.security.user.UserDetailsInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class UserDetailsServiceImpl implements UserDetailsService {
// TODO 這里改成你自己的服務(wù)或者Dao查詢(xún)
@Autowired
private UserDao userDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
log.info("進(jìn)入 loadUserByUsername ...");
// TODO 查詢(xún)系統(tǒng)內(nèi)的用戶(hù)
LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserEntity::getUsername, username);
UserEntity userEntity = userDao.selectOne(wrapper);
if (userEntity == null) {
// 未查詢(xún)到用戶(hù)
throw new RuntimeException("not find user");
}
// TODO 封裝成實(shí)現(xiàn)了 UserDetails 接口的實(shí)體類(lèi)模型
return UserDetailsInfo.builder()
.id(userEntity.getId())
.username(userEntity.getUsername())
.password(userEntity.getPassword())
.build();
}
}
UserDetailsService 方法介紹
| 方法名 | 作用 |
| UserDetails loadUserByUsername(String username) | 根據(jù)用戶(hù)名加載用戶(hù)信息 |
到此這篇關(guān)于SpringSecurity中的UserDetails和UserDetailsService接口詳解的文章就介紹到這了,更多相關(guān)UserDetails和UserDetailsService接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java模擬rank/over函數(shù)實(shí)現(xiàn)獲取分組排名的方法詳解
這篇文章主要為大家詳細(xì)介紹了Java模擬rank()、over()函數(shù)獲取分組排名的方法設(shè)計(jì)及實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-04-04
SpringCloud中數(shù)據(jù)認(rèn)證加密的方法總結(jié)
在當(dāng)今分布式系統(tǒng)的日益復(fù)雜和信息傳遞的廣泛網(wǎng)絡(luò)化環(huán)境中,數(shù)據(jù)的加密和認(rèn)證作為保障信息傳遞安全的關(guān)鍵手段,Spring?Cloud,作為一套構(gòu)建微服務(wù)架構(gòu)的強(qiáng)大框架,提供了多種靈活而強(qiáng)大的數(shù)據(jù)加密和認(rèn)證方式,本文給大家總結(jié)了SpringCloud數(shù)據(jù)認(rèn)證加密的方法2024-03-03
Java編程常見(jiàn)內(nèi)存溢出異常與代碼示例
這篇文章主要介紹了Java編程常見(jiàn)內(nèi)存溢出異常與代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
mybatis快速入門(mén)學(xué)習(xí)教程新手注意問(wèn)題小結(jié)
MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的持久層框架。接下來(lái)通過(guò)本文給大家介紹mybatis快速入門(mén)學(xué)習(xí)教程新手注意問(wèn)題小結(jié),需要的朋友可以參考下2017-02-02
簡(jiǎn)單介紹一下什么是microservice微服務(wù)
這篇文章主要介紹了一下什么是microservice微服務(wù)微服務(wù)的定義,微服務(wù)到底是什么意思?什么樣的架構(gòu)可以叫做微服務(wù)?這篇文章可以給你答案2023-03-03
java中volatile和synchronized的區(qū)別與聯(lián)系
這篇文章主要介紹了java中volatile和synchronized的區(qū)別與聯(lián)系的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下2017-10-10
Java通過(guò)百度地圖API獲取定位(普通IP定位)的方法教程
這篇文章主要介紹了Java通過(guò)百度地圖API獲取定位的方法教程,首先說(shuō)明了實(shí)現(xiàn)這個(gè)功能的需求和初衷,然后詳細(xì)描述了利用百度地圖API實(shí)現(xiàn)這個(gè)功能的步驟,包括在百度地圖開(kāi)放平臺(tái)的準(zhǔn)備工作、學(xué)習(xí)官網(wǎng)API文檔、修改API的AK配置、Java代碼獲取定位等,需要的朋友可以參考下2024-11-11

