package com.nova.sankuai.security; import com.nova.sankuai.domain.entity.CustomerUser; import com.nova.sankuai.domain.entity.SysUser; import com.nova.sankuai.domain.enums.UserTypeEnum; import com.nova.sankuai.infra.constants.Constants; import com.nova.sankuai.service.ICustomerUserService; import com.nova.sankuai.service.ISysUserService; import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; 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.Service; /** * @author weikangdi */ @Service @AllArgsConstructor @ApiModel("自定义用户认证类") public class UserDetailsServiceImpl implements UserDetailsService { private final ISysUserService sysUserService; private final UserDetailUtil userDetailUtil; private final ICustomerUserService customerUserService; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getUserPhone, username).one(); return userDetailUtil.parse(sysUser); } public UserDetails loadUserByPhone(UserDetail userDetail) throws UsernameNotFoundException { if (UserTypeEnum.CUSTOMER.getCode().equals(userDetail.getType())) { CustomerUser customerUser = customerUserService.lambdaQuery().eq(CustomerUser::getPhone, userDetail.getPhone()).one(); if (customerUser == null) { throw new UsernameNotFoundException("没有找到对应的客户账号"); } return userDetailUtil.parseCustomer(customerUser); } SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getUserPhone, userDetail.getPhone()) .eq(SysUser::getStatus, Constants.UserStatus.ENABLE).one(); if (sysUser == null) { throw new UsernameNotFoundException("没有找到对应的后台用户"); } return userDetailUtil.parse(sysUser); } }