数据库动态认证封装用户的代码怎么写
本篇内容介绍了“数据库动态认证封装用户的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
代码实现
/***创建1个抽象类*将代码重复部分放到抽象类中*代码不同的部分,让其他类继承该抽象类重写*/publicabstractclassAbstractUserDetailsServiceimplementsUserDetailsService{@AutowiredprivateSysPermissionServicesysPermissionService;/***这个方法交给子类去实现它,查询用户信息*@paramusernameOrMobile用户名或者手机号*@return*/publicabstractSysUserfindSysUser(StringusernameOrMobile);@OverridepublicUserDetailsloadUserByUsername(StringusernameOrMobile)throwsUsernameNotFoundException{//1.通过请求的用户名去数据库中查询用户信息SysUsersysUser=findSysUser(usernameOrMobile);//通过用户id去获取权限信息findSysPermission(sysUser);returnsysUser;}//私有的方法,里面放到时重复的代码privatevoidfindSysPermission(SysUsersysUser){//判断该用户是否存在if(sysUser==null){thrownewUsernameNotFoundException("用户名或密码错误");}//2.查询该用户有哪一些权限List<SysPermission>permissions=sysPermissionService.findByUserId(sysUser.getId());//判断该用户拥有的权限是否为空if(CollectionUtils.isEmpty(permissions)){return;}//将权限设置到该对象中sysUser.setPermissions(permissions);//3.封装权限信息List<GrantedAuthority>authorities=Lists.newArrayList();for(SysPermissionsp:permissions){//获取权限标识Stringcode=sp.getCode();authorities.add(newSimpleGrantedAuthority(code));}//不需要return,因为是同一个对象sysUser.setAuthorities(authorities);}}/***实现自定义的抽象类*查询数据库中的用户信息*/@Component("customUserDetailsService")//publicclassCustomUserDetailsServiceimplementsUserDetailsService{publicclassCustomUserDetailsServiceextendsAbstractUserDetailsService{Loggerlogger=LoggerFactory.getLogger(getClass());@AutowiredPasswordEncoderpasswordEncoder;@AutowiredSysUserServicesysUserService;@OverridepublicSysUserfindSysUser(StringusernameOrMobile){logger.info("请求认证的用户名:"+usernameOrMobile);//1.通过请求的用户名去数据库中查询用户信息returnsysUserService.findByUsername(usernameOrMobile);}}@Component("mobileUserDetailsService")publicclassMobileUserDetailsServiceextendsAbstractUserDetailsService{Loggerlogger=LoggerFactory.getLogger(getClass());@AutowiredSysUserServicesysUserService;@OverridepublicSysUserfindSysUser(StringusernameOrMobile){logger.info("请求的手机号是:"+usernameOrMobile);//1.通过手机号查询用户信息returnsysUserService.findByMobile(usernameOrMobile);}}
注意点
#抽象类和子类中必须包含如下代码,不能删除,且抽象类和子类中只能有1个类包含该代码@AutowiredPasswordEncoderpasswordEncoder;
“数据库动态认证封装用户的代码怎么写”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。