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