久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

數據庫動態認證封裝用戶的代碼怎么寫

164次閱讀
沒有評論

共計 2423 個字符,預計需要花費 7 分鐘才能閱讀完成。

本篇內容介紹了“數據庫動態認證封裝用戶的代碼怎么寫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

代碼實現

/**
 *  創建 1 個抽象類
 *  將代碼重復部分放到抽象類中
 *  代碼不同的部分,讓其他類繼承該抽象類重寫
 */
public abstract class AbstractUserDetailsService implements UserDetailsService {
 @Autowired
 private SysPermissionService sysPermissionService;
 /**
 *  這個方法交給子類去實現它,查詢用戶信息
 * @param usernameOrMobile  用戶名或者手機號
 * @return
 */
 public abstract SysUser findSysUser(String usernameOrMobile);
 @Override
 public UserDetails loadUserByUsername(String usernameOrMobile) throws UsernameNotFoundException {
 // 1.  通過請求的用戶名去數據庫中查詢用戶信息
 SysUser sysUser = findSysUser(usernameOrMobile);
 //  通過用戶 id 去獲取權限信息
 findSysPermission(sysUser);
 return sysUser;
 }
 //  私有的方法,里面放到時重復的代碼
 private void findSysPermission(SysUser sysUser) {
 //  判斷該用戶是否存在
 if(sysUser == null) {
 throw new UsernameNotFoundException( 用戶名或密碼錯誤 
 }
 // 2.  查詢該用戶有哪一些權限
 List SysPermission  permissions = sysPermissionService.findByUserId(sysUser.getId());
 //  判斷該用戶擁有的權限是否為空
 if(CollectionUtils.isEmpty(permissions)) {
 return ;
 }
 //  將權限設置到該對象中
 sysUser.setPermissions(permissions);
 // 3.  封裝權限信息
 List GrantedAuthority  authorities = Lists.newArrayList();
 for(SysPermission sp: permissions) {
 //  獲取權限標識
 String code = sp.getCode();
 authorities.add(new SimpleGrantedAuthority(code));
 }
 //  不需要 return,因為是同一個對象
 sysUser.setAuthorities(authorities);
 }
 *  實現自定義的抽象類
 *  查詢數據庫中的用戶信息
 */
@Component(customUserDetailsService)
//public class CustomUserDetailsService implements UserDetailsService {
public class CustomUserDetailsService extends AbstractUserDetailsService { Logger logger = LoggerFactory.getLogger(getClass());
 @Autowired
 PasswordEncoder passwordEncoder;
 @Autowired
 SysUserService sysUserService;
 @Override
 public SysUser findSysUser(String usernameOrMobile) { logger.info( 請求認證的用戶名:   + usernameOrMobile);
 // 1.  通過請求的用戶名去數據庫中查詢用戶信息
 return sysUserService.findByUsername(usernameOrMobile);
 }
@Component(mobileUserDetailsService) 
public class MobileUserDetailsService extends AbstractUserDetailsService { Logger logger = LoggerFactory.getLogger(getClass());
 @Autowired
 SysUserService sysUserService;
 @Override
 public SysUser findSysUser(String usernameOrMobile) { logger.info( 請求的手機號是: + usernameOrMobile);
 // 1.  通過手機號查詢用戶信息
 return sysUserService.findByMobile(usernameOrMobile);
 }
}

注意點

#  抽象類和子類中必須包含如下代碼,不能刪除,且抽象類和子類中只能有 1 個類包含該代碼
@Autowired 
PasswordEncoder passwordEncoder;

“數據庫動態認證封裝用戶的代碼怎么寫”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計2423字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 柘荣县| 富阳市| 金溪县| 罗源县| 民乐县| 岐山县| 湘乡市| 且末县| 保山市| 舞钢市| 拜城县| 华蓥市| 扶沟县| 安仁县| 山阴县| 应城市| 长治县| 固始县| 阳泉市| 奉贤区| 洱源县| 连云港市| 岳池县| 甘德县| 盖州市| 新沂市| 老河口市| 尖扎县| 文水县| 新民市| 宁安市| 福建省| 阜宁县| 永年县| 民乐县| 潮州市| 富阳市| 西林县| 永定县| 南投县| 德江县|