Air
2024-11-04 e91602b03701f11d87be2702fa37e0121c80d99f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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);
    }
}