SpringSecurity中的UserDetails和UserDetailsService接口詳解
UserDetails
UserDetails 在 Spring Security 框架中主要擔任獲取用戶信息的接口,通過該接口就能拿到用戶的信息和驗證用戶的信息,這些信息在下面的方法中會有講述。
UserDetails 接口中各個方法詳解
方法名 | 作用 |
Collection<? extends GrantedAuthority> getAuthorities() | 授予用戶的權限 |
String getPassword() | 用戶的密碼(當前密碼是經過加密后的) |
String getUsername() | 用戶名 |
boolean isAccountNonExpired() | 用戶的賬號是否過期 true 未過期 false 已過期 |
boolean isAccountNonLocked() | 用戶的賬號是否被鎖定 true 未被鎖定 false 被鎖定 |
boolean isCredentialsNonExpired() | 用戶的憑據(密碼)是否已過期 true 未過期 false 已過期 |
boolean isAccountNonExpired() | 用戶是否啟用 true 啟用 false 禁用 |
UserDetailsService
UserDetailsService 在 Spring Security 中主要承擔查詢系統(tǒng)內用戶、驗證密碼、封裝用戶信息和角色權限。
大白話就是你寫一個實現類實現 UserDetailsService 接口,在這個實現類中去查詢數據庫中的用戶,并封裝成一個實現了 UserDetails 接口的實體類模型。
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 這里改成你自己的服務或者Dao查詢 @Autowired private UserDao userDao; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { log.info("進入 loadUserByUsername ..."); // TODO 查詢系統(tǒng)內的用戶 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 封裝成實現了 UserDetails 接口的實體類模型 return UserDetailsInfo.builder() .id(userEntity.getId()) .username(userEntity.getUsername()) .password(userEntity.getPassword()) .build(); } }
UserDetailsService 方法介紹
方法名 | 作用 |
UserDetails loadUserByUsername(String username) | 根據用戶名加載用戶信息 |
到此這篇關于SpringSecurity中的UserDetails和UserDetailsService接口詳解的文章就介紹到這了,更多相關UserDetails和UserDetailsService接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java模擬rank/over函數實現獲取分組排名的方法詳解
這篇文章主要為大家詳細介紹了Java模擬rank()、over()函數獲取分組排名的方法設計及實現,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-04-04java中volatile和synchronized的區(qū)別與聯系
這篇文章主要介紹了java中volatile和synchronized的區(qū)別與聯系的相關資料,希望通過本文能幫助到大家,讓大家理解這部分內容,需要的朋友可以參考下2017-10-10Java通過百度地圖API獲取定位(普通IP定位)的方法教程
這篇文章主要介紹了Java通過百度地圖API獲取定位的方法教程,首先說明了實現這個功能的需求和初衷,然后詳細描述了利用百度地圖API實現這個功能的步驟,包括在百度地圖開放平臺的準備工作、學習官網API文檔、修改API的AK配置、Java代碼獲取定位等,需要的朋友可以參考下2024-11-11