huyao
2022-09-29 50e0d4741b19a5071741b200ff76a4d69504fce3
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
 
 
package cn.mb.cloud.auth.security.service.impl;
 
import cn.hutool.core.util.StrUtil;
import cn.mb.cloud.auth.security.component.MbCloudAuthUser;
import cn.mb.cloud.auth.security.entity.User;
import cn.mb.cloud.auth.security.mapper.UserMapper;
import cn.mb.cloud.auth.security.service.MbCloudUserAuthDetailsService;
import cn.mb.cloud.auth.security.service.SysSocialDetailsService;
import cn.mb.cloud.common.api.vo.UserVO;
import cn.mb.cloud.common.core.constant.CommonConstants;
import cn.mb.cloud.common.core.constant.SecurityConstants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
 
import java.util.Collection;
 
/**
 * 用户详细信息
 *
 * @author jason
 */
@Slf4j
@Service
@AllArgsConstructor
public class MbCloudAuthUserDetailsServiceImpl implements MbCloudUserAuthDetailsService {
 
    private final UserMapper userMapper;
    private final SysSocialDetailsService socialDetailsService;
 
    /**
     * 用户密码登录
     *
     * @param username 用户名
     * @return
     * @throws UsernameNotFoundException
     */
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User member = userMapper.selectOne(Wrappers.<User>query().
                lambda().eq(User::getUsername, username)
                .eq(User::getDelFlag, 0).ne(User::getRegisterType,2));
        if (null == member) {
            throw new UsernameNotFoundException("用户账号不存在", null);
        }
        UserVO userVO = new UserVO();
        BeanUtils.copyProperties(member, userVO);
        UserDetails userDetails = getUserDetails(userVO);
        return userDetails;
    }
 
 
    /**
     * 根据社交登录code 登录
     *
     * @param inStr TYPE@CODE
     * @return UserDetails
     * @throws UsernameNotFoundException
     */
    @Override
    public UserDetails loadUserBySocial(String inStr)  {
        return getUserDetails(socialDetailsService.getUserInfo(inStr));
    }
 
    @Override
    public void loadUserPermissions(Long userId) {
 
//        List<Long> roleIds = userMapper.listRolesByUserId(userId);
//        //设置权限列表(menu.permission)
//        Set<String> permissions = new HashSet<>();
//        Set<String> permissionUrls = new HashSet<>();
//        roleIds.forEach(roleId -> {
//            List<MenuVO> permissionList = userMapper.listMenusByRoleId(roleId);
//            permissionList.stream().forEach(item->{
//                permissions.add(item.getPermission());
//                permissionUrls.add(item.getPath());
//            });
//        });
//
//        if(CollectionUtil.isNotEmpty(permissions)){
//            permissions.removeIf(item->item ==null || "".equalsIgnoreCase(item));
//            redisTemplate.opsForValue().set(SecurityConstants.CACHE_USER_PERMISSIONS_KEY +"key:"+ userId, permissions);
//        }
//
//        if(CollectionUtil.isNotEmpty(permissionUrls)){
//            List<String> saveUrls = new ArrayList<>();
//            permissionUrls.forEach(urls->{
//                if(StringUtils.isNotEmpty(urls)){
//                    saveUrls.addAll(Arrays.asList(urls.split(",")));
//                }
//            });
//            saveUrls.removeIf(item->item ==null || "".equalsIgnoreCase(item));
//            redisTemplate.opsForValue().set(SecurityConstants.CACHE_USER_PERMISSIONS_KEY +"urls:"+ userId, saveUrls);
//        }
    }
 
    /**
     * 构建userdetails
     *
     * @param user 用户信息
     * @return
     */
    private UserDetails getUserDetails(UserVO user) {
        if (user == null) {
            throw new UsernameNotFoundException("用户不存在");
        }
        boolean enabled = StrUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL);
        // 构造security用户
        Collection<? extends GrantedAuthority> authorities = AuthorityUtils.
                createAuthorityList("GUEST");
 
        return new MbCloudAuthUser(user.getId(), user.getPhone(), user.getAvatar(), user.getTenantId(),
                user.getUsername(), SecurityConstants.BCRYPT +
                user.getPassword(), enabled, true, true,
                !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities);
    }
 
 
}