package com.lxzn.auth.security; import com.lxzn.framework.domain.ucenter.Menu; import com.lxzn.framework.domain.ucenter.ext.UserExt; import com.lxzn.ucenter.service.IUserService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; 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.oauth2.provider.ClientDetails; import org.springframework.security.oauth2.provider.ClientDetailsService; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private IUserService userService; @Autowired private ClientDetailsService clientDetailsService; @Value("${auth.clientId}") private String clientId; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { if (StringUtils.isEmpty(username)) { return null; } //取出身份,如果身份为空说明没有认证 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); //没有认证统一采用httpbasic认证,httpbasic中存储了client_id和client_secret,开始认证client_id和client_secret if(authentication==null || username.equals(clientId)){ //return new User(username, BCryptUtil.encode(clientSecret),AuthorityUtils.commaSeparatedStringToAuthorityList("")); ClientDetails clientDetails = clientDetailsService.loadClientByClientId(username); if(clientDetails != null){ //密码 String clientSecret = clientDetails.getClientSecret(); return new User(username,clientSecret,AuthorityUtils.commaSeparatedStringToAuthorityList("")); } } //远程调用用户中心根据账号查询用户信息 UserExt userExt = userService.findUserExtByUsername(username); if(userExt == null) { return null; } //如果没有任何菜单权限则不允许登陆系统 if(userExt.getPermissions() == null || userExt.getPermissions().isEmpty()) return null; //userExt.setPermissions(new ArrayList