|
@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.huaxu.dao.UserMapper;
|
|
|
import com.huaxu.dto.UserDto;
|
|
|
import com.huaxu.entity.LoginLog;
|
|
|
+import com.huaxu.entity.Org;
|
|
|
import com.huaxu.entity.User;
|
|
|
-import com.huaxu.model.AjaxMessage;
|
|
|
-import com.huaxu.model.ResultStatus;
|
|
|
+import com.huaxu.model.*;
|
|
|
+import com.huaxu.security.config.RedisTokenStore;
|
|
|
import com.huaxu.security.exception.SecurityException;
|
|
|
+import com.huaxu.security.mobile.MobileLoginAuthenticationToken;
|
|
|
import com.huaxu.security.smsCode.SmsCodeException;
|
|
|
import com.huaxu.service.UserService;
|
|
|
import com.huaxu.util.ByteArrayUtils;
|
|
@@ -16,11 +18,21 @@ import com.huaxu.util.RedisUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
|
+import org.springframework.data.redis.connection.RedisConnection;
|
|
|
+import org.springframework.security.core.GrantedAuthority;
|
|
|
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
|
|
+import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
+import org.springframework.security.oauth2.common.OAuth2AccessToken;
|
|
|
+import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
|
|
|
+import org.springframework.security.oauth2.provider.*;
|
|
|
+import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
|
|
|
import org.springframework.security.oauth2.provider.token.ConsumerTokenServices;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.ReflectionUtils;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 用户(User表)服务实现类
|
|
@@ -38,6 +50,12 @@ public class UserServiceImpl implements UserService {
|
|
|
private RedisUtil redisUtil;
|
|
|
@Autowired
|
|
|
private HttpServletRequest request;
|
|
|
+ @Autowired
|
|
|
+ private ClientDetailsService clientDetailsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AuthorizationServerTokenServices authorizationServerTokenServices;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 通过ID查询单条数据
|
|
@@ -148,31 +166,103 @@ public class UserServiceImpl implements UserService {
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public List<UserDto> login(UserDto dto) {
|
|
|
+ public OAuth2AccessToken chooseUser(User user) {
|
|
|
|
|
|
- List<UserDto> loginInfo = userMapper.findLoginInfo(dto);
|
|
|
- if(loginInfo.size()==0){
|
|
|
- throw new SecurityException(ResultStatus.PHONE_NUMBER_NOT_FOUND_ERROR);
|
|
|
- }
|
|
|
- if(!dto.getSmsCode().equals("20201023")){
|
|
|
- String key = "smsCode:" + dto.getLoginName();
|
|
|
- byte[] redisValidateCodeByte = redisUtil.get(key.getBytes());
|
|
|
- if (redisValidateCodeByte == null) {
|
|
|
- throw new SmsCodeException(ResultStatus.PHONE_VALIDATE_CODE_EXPIRED_ERROR);
|
|
|
- } else {
|
|
|
- String validateCode = (String) ByteArrayUtils.bytesToObject(redisValidateCodeByte).get();
|
|
|
- if (!StringUtils.equals(validateCode, dto.getSmsCode())) {
|
|
|
- throw new SmsCodeException(ResultStatus.PHONE_VALIDATE_CODE_ERROR_ERROR);
|
|
|
+
|
|
|
+ user=findUser(user);
|
|
|
+ Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
|
|
|
+ OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
|
|
|
+ LoginUser loginUser = (LoginUser) oAuth2Authentication.getPrincipal();
|
|
|
+
|
|
|
+ //角色必须是ROLE_开头,其余的是用户功能权限
|
|
|
+ /* List<Permission> permissionList =findPermission(user);
|
|
|
+ Integer permissionType = permissionList.get(0).getPermissionType();
|
|
|
+ List<ProgramItem> programItemList = newArrayList();
|
|
|
+ //获取数据权限
|
|
|
+ getDataPermission(permissionType,user,programItemList);
|
|
|
+ //分配功能权限
|
|
|
+ if (permissionList.size() > 0) {
|
|
|
+ for (Permission permission : permissionList) {
|
|
|
+ if(!StringUtils.equals("",permission.getPermission())){
|
|
|
+ GrantedAuthority authority1 = new SimpleGrantedAuthority(permission.getPermission());
|
|
|
+ grantedAuthorities.add(authority1);
|
|
|
}
|
|
|
}
|
|
|
+ }*/
|
|
|
+ GrantedAuthority authority1 = new SimpleGrantedAuthority("sys:menu:edit");
|
|
|
+ grantedAuthorities.add(authority1);
|
|
|
+ loginUser.setLoginToken(UUID.randomUUID().toString());
|
|
|
+ // loginUser.setProgramItemList(programItemList);
|
|
|
+ loginUser.setName(user.getUsername());
|
|
|
+ loginUser.setId(user.getId());
|
|
|
+ loginUser.setUsername(user.getUsername());
|
|
|
+ loginUser.setCompanyId(user.getCompanyOrgId());
|
|
|
+ loginUser.setDepartmentId(user.getDeptOrgId());
|
|
|
+ loginUser.setTenantId(user.getTenantId());
|
|
|
+ loginUser.setType(user.getUserType());
|
|
|
+ loginUser.setAuthorities(grantedAuthorities);
|
|
|
+ MobileLoginAuthenticationToken authenticationTokenReslut = new MobileLoginAuthenticationToken(loginUser,oAuth2Authentication.getCredentials(),loginUser.getAuthorities());
|
|
|
+ authenticationTokenReslut.setDetails(oAuth2Authentication.getDetails());
|
|
|
+ OAuth2Authentication oAuth2AuthenticationNew = new OAuth2Authentication(oAuth2Authentication.getOAuth2Request(), authenticationTokenReslut);
|
|
|
+
|
|
|
+ OAuth2AccessToken accessToken = authorizationServerTokenServices.createAccessToken(oAuth2AuthenticationNew);
|
|
|
+ //0404d87f-c25d-4947-b17a-0cb65210f5bb
|
|
|
+ //new RedisTokenStore()
|
|
|
+ return accessToken;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void getDataPermission(int permissionType,User user, List<ProgramItem> programItemList){
|
|
|
+
|
|
|
+ if(permissionType==1){
|
|
|
+ ProgramItem programItem=new ProgramItem();
|
|
|
+ programItem.setOrgId(user.getCompanyOrgId());
|
|
|
+ programItemList.add(programItem);
|
|
|
+ }else if(permissionType==2){
|
|
|
+ Map<Integer, List<Org>> allOrgs = getAllOrgs("公司");
|
|
|
+ getOrg(user.getCompanyOrgId(),allOrgs,programItemList);
|
|
|
+
|
|
|
+ }else if(permissionType==3){
|
|
|
+ ProgramItem programItem=new ProgramItem();
|
|
|
+ programItem.setOrgId(user.getDeptOrgId());
|
|
|
+ programItemList.add(programItem);
|
|
|
+ }else if(permissionType==4) {
|
|
|
+ Map<Integer, List<Org>> allOrgs = getAllOrgs("公司");
|
|
|
+ getOrg(user.getCompanyOrgId(),allOrgs,programItemList);
|
|
|
+
|
|
|
+ }else if(permissionType==5){
|
|
|
+ programItemList= userMapper.findOrgRole(user);
|
|
|
}
|
|
|
|
|
|
+ }
|
|
|
+ private Map<Integer, List<Org>> getAllOrgs(String orgType){
|
|
|
+ Org org=new Org();
|
|
|
+ org.setOrgType(orgType);
|
|
|
+ List<Org> orgs = userMapper.findOrgs(org);
|
|
|
+ Map<Integer, List<Org>> collect = orgs.stream().
|
|
|
+ collect(Collectors.groupingBy(d -> d.getParentOrgId()));
|
|
|
+ return collect;
|
|
|
+ };
|
|
|
+ public void getOrg(Integer id, Map<Integer, List<Org>> collect,List<ProgramItem>programItemList){
|
|
|
+ List<Org> orgs = collect.get(id);
|
|
|
+ if(orgs!=null){
|
|
|
+ orgs.forEach(org->{
|
|
|
+ ProgramItem item=new ProgramItem();
|
|
|
+ item.setOrgId(org.getId());
|
|
|
+ item.setCode(org.getTenantId());
|
|
|
+ programItemList.add(item);
|
|
|
+ getOrg(org.getId(),collect,programItemList);
|
|
|
|
|
|
- return loginInfo;
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
+ private List<Permission>findPermission(User user){
|
|
|
+ List<Permission> permissionList = userMapper.findPermission(user);
|
|
|
|
|
|
+ return permissionList;
|
|
|
+ }
|
|
|
@Override
|
|
|
public boolean logOut(String token) {
|
|
|
+
|
|
|
boolean flag=consumerTokenServices.revokeToken(token);
|
|
|
return flag;
|
|
|
}
|