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);
|
}
|
}
|