Просмотр исходного кода

Merge remote-tracking branch 'origin/hotfix-0121'

Hu Jie 7 лет назад
Родитель
Сommit
5c8ecf7ecb
1 измененных файлов с 31 добавлено и 0 удалено
  1. 31 0
      src/main/java/com/uas/platform/b2b/filter/SSOInterceptor.java

+ 31 - 0
src/main/java/com/uas/platform/b2b/filter/SSOInterceptor.java

@@ -29,6 +29,7 @@ import com.uas.sso.web.spring.AbstractSSOInterceptor;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.log4j.Logger;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.ehcache.EhCacheCacheManager;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.HttpStatus;
 import org.springframework.mobile.device.Device;
 import org.springframework.mobile.device.Device;
 import org.springframework.mobile.device.DeviceResolver;
 import org.springframework.mobile.device.DeviceResolver;
@@ -56,6 +57,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.Set;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 访问拦截
  * 访问拦截
@@ -87,6 +89,9 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
 	@Autowired
 	@Autowired
     private RoleDao roleDao;
     private RoleDao roleDao;
 
 
+	@Autowired
+	EhCacheCacheManager cacheManager;
+
 	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 
 
     @Autowired
     @Autowired
@@ -311,7 +316,9 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
 				// 如果是从个人用户切换或者当前企业切换
 				// 如果是从个人用户切换或者当前企业切换
 				boolean flag = null == user.getEnterprise() || !user.getEnterprise().getUu().equals(tokenUser.getSpaceUU());
 				boolean flag = null == user.getEnterprise() || !user.getEnterprise().getUu().equals(tokenUser.getSpaceUU());
 				if (!StringUtils.isEmpty(tokenUser.getSpaceUU()) && flag) {
 				if (!StringUtils.isEmpty(tokenUser.getSpaceUU()) && flag) {
+					user = getUserByToken(user, tokenUser);
 					user.setCurrentEnterprise(tokenUser.getSpaceUU());
 					user.setCurrentEnterprise(tokenUser.getSpaceUU());
+					request.getSession().setAttribute("user", user);
 				}
 				}
 			}
 			}
 		}
 		}
@@ -334,6 +341,30 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
 		}
 		}
 	}
 	}
 
 
+	/**
+	 * 处理在商城注册企业并切换到新企业未同步到商城问题
+	 * @param user
+	 * @param tokenUser
+	 * @return
+	 */
+	private User getUserByToken(User user, UserAccount tokenUser) {
+		Set<Enterprise> enterprises = user.getEnterprises();
+		if (!CollectionUtils.isEmpty(enterprises)) {
+			List<Enterprise> correctEnterprises = enterprises.stream().filter(enter -> enter.getUu().equals(tokenUser.getSpaceUU())).collect(Collectors.toList());
+			if (CollectionUtils.isEmpty(correctEnterprises)) {
+				cacheManager.getCacheManager().clearAllStartingWith("com.uas.platform.b2b.model.User");
+				User current = userDao.findOne(tokenUser.getUserUU());
+				if (!StringUtils.isEmpty(current)) {
+					user = current;
+					logger.info("从数据库查找的企业:" + tokenUser.getSpaceUU());
+				} else {
+					logger.info("未查询到用户信息" + tokenUser.getUserUU());
+				}
+			}
+		}
+		return user;
+	}
+
     /**
     /**
      * 检验是否个人用户
      * 检验是否个人用户
      *
      *