SpringSecurity中的UserDetails和UserDetailsService接口詳解
UserDetails
UserDetails 在 Spring Security 框架中主要擔(dān)任獲取用戶信息的接口,通過該接口就能拿到用戶的信息和驗(yàn)證用戶的信息,這些信息在下面的方法中會(huì)有講述。
UserDetails 接口中各個(gè)方法詳解
| 方法名 | 作用 |
| Collection<? extends GrantedAuthority> getAuthorities() | 授予用戶的權(quán)限 |
| String getPassword() | 用戶的密碼(當(dāng)前密碼是經(jīng)過加密后的) |
| String getUsername() | 用戶名 |
| boolean isAccountNonExpired() | 用戶的賬號(hào)是否過期 true 未過期 false 已過期 |
| boolean isAccountNonLocked() | 用戶的賬號(hào)是否被鎖定 true 未被鎖定 false 被鎖定 |
| boolean isCredentialsNonExpired() | 用戶的憑據(jù)(密碼)是否已過期 true 未過期 false 已過期 |
| boolean isAccountNonExpired() | 用戶是否啟用 true 啟用 false 禁用 |
UserDetailsService
UserDetailsService 在 Spring Security 中主要承擔(dān)查詢系統(tǒng)內(nèi)用戶、驗(yàn)證密碼、封裝用戶信息和角色權(quán)限。
大白話就是你寫一個(gè)實(shí)現(xiàn)類實(shí)現(xiàn) UserDetailsService 接口,在這個(gè)實(shí)現(xiàn)類中去查詢數(shù)據(jù)庫中的用戶,并封裝成一個(gè)實(shí)現(xiàn)了 UserDetails 接口的實(shí)體類模型。
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查詢
@Autowired
private UserDao userDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
log.info("進(jìn)入 loadUserByUsername ...");
// TODO 查詢系統(tǒng)內(nèi)的用戶
LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserEntity::getUsername, username);
UserEntity userEntity = userDao.selectOne(wrapper);
if (userEntity == null) {
// 未查詢到用戶
throw new RuntimeException("not find user");
}
// TODO 封裝成實(shí)現(xiàn)了 UserDetails 接口的實(shí)體類模型
return UserDetailsInfo.builder()
.id(userEntity.getId())
.username(userEntity.getUsername())
.password(userEntity.getPassword())
.build();
}
}
UserDetailsService 方法介紹
| 方法名 | 作用 |
| UserDetails loadUserByUsername(String username) | 根據(jù)用戶名加載用戶信息 |
到此這篇關(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
mybatis快速入門學(xué)習(xí)教程新手注意問題小結(jié)
MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的持久層框架。接下來通過本文給大家介紹mybatis快速入門學(xué)習(xí)教程新手注意問題小結(jié),需要的朋友可以參考下2017-02-02
java中volatile和synchronized的區(qū)別與聯(lián)系
這篇文章主要介紹了java中volatile和synchronized的區(qū)別與聯(lián)系的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下2017-10-10
Java通過百度地圖API獲取定位(普通IP定位)的方法教程
這篇文章主要介紹了Java通過百度地圖API獲取定位的方法教程,首先說明了實(shí)現(xiàn)這個(gè)功能的需求和初衷,然后詳細(xì)描述了利用百度地圖API實(shí)現(xiàn)這個(gè)功能的步驟,包括在百度地圖開放平臺(tái)的準(zhǔn)備工作、學(xué)習(xí)官網(wǎng)API文檔、修改API的AK配置、Java代碼獲取定位等,需要的朋友可以參考下2024-11-11

