数据库动态认证封装用户的代码怎么写

网友投稿 655 2023-11-12

数据库动态认证封装用户的代码怎么写

本篇内容介绍了“数据库动态认证封装用户的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

数据库动态认证封装用户的代码怎么写

代码实现

/**  * 创建1个抽象类  * 将代码重复部分放到抽象类中  * 代码不同的部分,让其他类继承该抽象类重写  */ public abstract class AbstractUserDetailsService implements UserDetailsService {@Autowired     private SysPermissionService sysPermissionService;     /**      * 这个方法交给子类去实现它,查询用户信息      *@param usernameOrMobile 用户名或者手机号      * @return      */     public abstractSysUserfindSysUser(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 newUsernameNotFoundException("用户名或密码错误");         }         // 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(newSimpleGrantedAuthority(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. 通过请求的用户名去数据库中查询用户信息         returnsysUserService.findByUsername(usernameOrMobile);     } }@Component("mobileUserDetailsService"public class MobileUserDetailsService extends AbstractUserDetailsService {     Logger logger = LoggerFactory.getLogger(getClass());     @AutowiredSysUserService sysUserService;@Override     public SysUser findSysUser(String usernameOrMobile) {         logger.info("请求的手机号是:" + usernameOrMobile);         // 1. 通过手机号查询用户信息         returnsysUserService.findByMobile(usernameOrMobile);     } }

注意点

# 抽象类和子类中必须包含如下代码,不能删除,且抽象类和子类中只能有1个类包含该代码 @Autowired PasswordEncoder passwordEncoder;

“数据库动态认证封装用户的代码怎么写”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何解决数据库数据一致性
下一篇:mysql命令行备份数据库的方法是什么
相关文章