package cc.mrbird.febs.auth.service.impl; import cc.mrbird.febs.auth.manager.UserManager; import cc.mrbird.febs.common.core.entity.FebsAuthUser; import cc.mrbird.febs.common.core.entity.constant.ParamsConstant; import cc.mrbird.febs.common.core.entity.constant.SocialConstant; import cc.mrbird.febs.common.core.entity.system.SystemUser; import cc.mrbird.febs.common.core.utils.FebsUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; 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.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * @author MrBird */ @Service @RequiredArgsConstructor public class FebsUserDetailServiceImpl implements UserDetailsService { private final PasswordEncoder passwordEncoder; private final UserManager userManager; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { HttpServletRequest httpServletRequest = FebsUtil.getHttpServletRequest(); SystemUser systemUser = userManager.findByName(username); if (systemUser != null) { String permissions = userManager.findUserPermissions(systemUser.getUsername()); boolean notLocked = false; if (StringUtils.equals(SystemUser.STATUS_VALID, systemUser.getStatus())) { notLocked = true; } String password = systemUser.getPassword(); String loginType = (String) httpServletRequest.getAttribute(ParamsConstant.LOGIN_TYPE); if (StringUtils.equals(loginType, SocialConstant.SOCIAL_LOGIN)) { password = passwordEncoder.encode(SocialConstant.getSocialLoginPassword()); } List grantedAuthorities = AuthorityUtils.NO_AUTHORITIES; if (StringUtils.isNotBlank(permissions)) { grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(permissions); } FebsAuthUser authUser = new FebsAuthUser(systemUser.getUsername(), password, true, true, true, notLocked, grantedAuthorities); BeanUtils.copyProperties(systemUser, authUser); return authUser; } else { throw new UsernameNotFoundException(""); } } }