Эх сурвалжийг харах

切换个人账号问题处理

liusw 7 жил өмнө
parent
commit
e793e42bd9

+ 2 - 31
src/main/java/com/uas/platform/b2c/common/account/controller/AuthenticationController.java

@@ -109,6 +109,8 @@ public class AuthenticationController {
 		UserAccount tokenUser = FlexJsonUtils.fromJson(token.getData(), UserAccount.class);
 		if (enUU == 0L) {
 			tokenUser.setSpaceUU(null);
+			tokenUser.setBusinessCode(null);
+			tokenUser.setSpaceName(null);
 		} else {
 			tokenUser.setSpaceUU(enUU);
 		}
@@ -117,37 +119,6 @@ public class AuthenticationController {
 		SSOHelper.setSSOCookie(request, response, token, true);
 	}
 
-	private User getUserByToken(SSOToken token) {
-		User authedUser = null;
-		if (token.getData() != null) {
-			UserAccount tokenUser = FlexJsonUtils.fromJson(token.getData(), UserAccount.class);
-			if (!StringUtils.isEmpty(tokenUser.getUserUU())) {
-				// dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
-				authedUser = userService.findUserByUserUU(tokenUser.getUserUU());
-			} else if (!StringUtils.isEmpty(tokenUser.getMobile())) {
-				// UID表示所有系统公认的唯一标识,这里统一使用手机号
-				authedUser = userService.findUserByUserTel(tokenUser.getMobile());
-			} else {
-//				logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getVipName()));
-			}
-			if (authedUser != null && authedUser.getEnterprises() != null) {
-				// 企业资料在client系统自己的唯一标识,比如en_uu
-				if (tokenUser.getSpaceUU() != null) {
-					authedUser.setCurrentEnterprise(tokenUser.getSpaceUU());
-				} else if (tokenUser.getBusinessCode() != null) {
-					for (Enterprise enterprise : authedUser.getEnterprises()) {
-						// 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
-						if (tokenUser.getBusinessCode().equals(enterprise.getEnBussinessCode())) {
-							authedUser.setEnterprise(enterprise);
-							break;
-						}
-					}
-				}
-			}
-		}
-		return authedUser;
-	}
-
 	/**
 	 * 根据访问url判断权限;
 	 * @param resUrl

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java

@@ -103,7 +103,7 @@ public class SecurityController {
 		SSOHelper.clearLogin(request, response);
 		SystemSession.clear();
 		// 使session失效
-		request.getSession().invalidate();
+//		request.getSession().invalidate();
 		if (StringUtils.isEmpty(returnUrl)) {
 			returnUrl = request.getHeader("Referer");
 		}

+ 8 - 0
src/main/java/com/uas/platform/b2c/common/account/service/UserService.java

@@ -6,6 +6,7 @@ import com.uas.platform.b2c.common.account.model.UserCacheEnterprise;
 import com.uas.platform.b2c.common.account.model.UserInfo;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
+import com.uas.sso.SSOToken;
 import org.springframework.data.domain.Page;
 
 import javax.servlet.http.HttpServletRequest;
@@ -220,4 +221,11 @@ public interface UserService {
 	 * @param enuu
 	 */
 	void saveLoginTime(Long enuu);
+
+	/**
+	 * 通过token获取用户信息
+	 * @param token
+	 * @return
+	 */
+	User getUserByToken(SSOToken token);
 }

+ 35 - 0
src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java

@@ -13,6 +13,9 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.encry.Md5Utils;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.sso.SSOToken;
+import com.uas.sso.entity.UserAccount;
 import com.uas.sso.entity.UserView;
 import com.uas.sso.util.AccountUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -640,4 +643,36 @@ public class UserServiceImpl implements UserService {
 
 		}
 	}
+
+	@Override
+	public User getUserByToken(SSOToken token) {
+		User authedUser = null;
+		if (token.getData() != null) {
+			UserAccount tokenUser = FlexJsonUtils.fromJson(token.getData(), UserAccount.class);
+			if (!StringUtils.isEmpty(tokenUser.getUserUU())) {
+				// dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
+				authedUser = findUserByUserUU(tokenUser.getUserUU());
+			} else if (!StringUtils.isEmpty(tokenUser.getMobile())) {
+				// UID表示所有系统公认的唯一标识,这里统一使用手机号
+				authedUser = findUserByUserTel(tokenUser.getMobile());
+			} else {
+				return null;
+			}
+			if (authedUser != null && authedUser.getEnterprises() != null) {
+				// 企业资料在client系统自己的唯一标识,比如en_uu
+				if (tokenUser.getSpaceUU() != null) {
+					authedUser.setCurrentEnterprise(tokenUser.getSpaceUU());
+				} else if (tokenUser.getBusinessCode() != null) {
+					for (Enterprise enterprise : authedUser.getEnterprises()) {
+						// 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
+						if (tokenUser.getBusinessCode().equals(enterprise.getEnBussinessCode())) {
+							authedUser.setEnterprise(enterprise);
+							break;
+						}
+					}
+				}
+			}
+		}
+		return authedUser;
+	}
 }

+ 6 - 47
src/main/java/com/uas/platform/b2c/core/filter/SSOInterceptor.java

@@ -13,6 +13,7 @@ import com.uas.platform.b2c.common.weixin.contoller.WeChatController;
 import com.uas.platform.b2c.core.constant.PathConstant;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.prod.store.controller.StoreInController;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
@@ -58,6 +59,8 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
 
     @Autowired
     private UserService userService;
+
+
     @Autowired
     private ResourceItemDao resourceItemDao;
     @Autowired
@@ -79,44 +82,8 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
     @Autowired
     private EnterpriseDao enterpriseDao;
 
-    private User getUserByToken(SSOToken token) {
-        User authedUser = null;
-        if (token.getData() != null) {
-            UserAccount tokenUser = FlexJsonUtils.fromJson(token.getData(), UserAccount.class);
-            if (!StringUtils.isEmpty(tokenUser.getUserUU())) {
-                // dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
-                authedUser = userService.findUserByUserUU(tokenUser.getUserUU());
-            } else if (!StringUtils.isEmpty(tokenUser.getMobile())) {
-                // UID表示所有系统公认的唯一标识,这里统一使用手机号
-                authedUser = userService.findUserByUserTel(tokenUser.getMobile());
-            } else {
-                logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getVipName()));
-            }
-            if (authedUser != null && authedUser.getEnterprises() != null) {
-                // 企业资料在client系统自己的唯一标识,比如en_uu
-                if (tokenUser.getSpaceUU() != null) {
-                    authedUser.setCurrentEnterprise(tokenUser.getSpaceUU());
-                } else if (tokenUser.getBusinessCode() != null) {
-                    for (Enterprise enterprise : authedUser.getEnterprises()) {
-                        // 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
-                        if (tokenUser.getBusinessCode().equals(enterprise.getEnBussinessCode())) {
-                            authedUser.setEnterprise(enterprise);
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-        return authedUser;
-    }
-
     @Override
     protected boolean onAuthenticateFailed(HttpServletRequest request, HttpServletResponse response) {
-        Cookie[] cookies = request.getCookies();
-        System.out.print("请求cookies:");
-        for (Cookie c : cookies) {
-            System.err.print(c.getName() + "-" + c.getValue());
-        }
         SystemSession.clear();
         if (request.getRequestURI().endsWith(PathConstant.AUTHENTICATION_URL)) {
             return true;
@@ -171,24 +138,16 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
     @Override
     protected void onAuthenticateSuccess(HttpServletRequest request, HttpServletResponse response) {
         SSOToken token = SSOHelper.attrToken(request);
-        User user = getUserByToken(token);
+        User user = userService.getUserByToken(token);
         if (user != null && user.getUserUU() != null) {
-            Enterprise enterprise = null;
-            if (user.getEnterprise() != null && user.getEnterprise().getUu() != null) {
-                enterprise = enterpriseDao.findByUu(user.getEnterprise().getUu());
-            }
-            user = userDao.findOne(user.getUserUU());
-            user.setEnterprise(enterprise);
-
             setGrantedAuthorities(user);
             user.setIp(AgentUtils.getIp(request));
             SystemSession.setUser(user);
             accessDecision(request, user);
             accessAdmin(request,user);
-
-            System.err.println("用户" + user.getUserName() + ",信息获取成功,uid:" + token.getUid());
+            logger.error(String.format("用户:%s,获取用户信息成功,手机号:%s", user.getUserName(), token.getUid()));
         } else {
-            System.err.println("用户信息获取失败,uid:" + token.getUid());
+            logger.error(String.format("用户获取用户信息失败,uid:%s", token.getUid()));
         }
     }
 

+ 1 - 37
src/main/java/com/uas/platform/b2c/core/filter/SystemSessionInterceptor.java

@@ -32,50 +32,14 @@ public class SystemSessionInterceptor extends HandlerInterceptorAdapter {
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         SSOToken token = (SSOToken)SSOHelper.getToken(request);
         if (SystemSession.getUser() == null && token != null) {
-            User user = getUserByToken(token);
+            User user = userService.getUserByToken(token);
             if (user != null) {
                 user.setIp(AgentUtils.getIp(request));
                 SystemSession.setUser(user);
             }
             HttpSession session = request.getSession(false);
-//            if (session != null && session.getAttribute("user") != null) {
-//                SystemSession.setUser((User) session.getAttribute("user"));
-//            }
             SystemSession.setSession(session);
         }
         return true;
     }
-
-    private User getUserByToken(SSOToken token) {
-        User authedUser = null;
-        if (token.getData() != null) {
-            UserAccount tokenUser = FlexJsonUtils.fromJson(token.getData(), UserAccount.class);
-            if (!StringUtils.isEmpty(tokenUser.getUserUU())) {
-                // dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
-                authedUser = userService.findUserByUserUU(tokenUser.getUserUU());
-            } else if (!StringUtils.isEmpty(tokenUser.getMobile())) {
-                // UID表示所有系统公认的唯一标识,这里统一使用手机号
-                authedUser = userService.findUserByUserTel(tokenUser.getMobile());
-            } else {
-                logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getVipName()));
-            }
-            if (authedUser != null && authedUser.getEnterprises() != null) {
-                // 企业资料在client系统自己的唯一标识,比如en_uu
-                if (tokenUser.getSpaceUU() != null) {
-                    authedUser.setCurrentEnterprise(tokenUser.getSpaceUU());
-                } else if (tokenUser.getBusinessCode() != null) {
-                    for (Enterprise enterprise : authedUser.getEnterprises()) {
-                        // 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
-                        if (tokenUser.getBusinessCode().equals(enterprise.getEnBussinessCode())) {
-                            authedUser.setEnterprise(enterprise);
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-        return authedUser;
-    }
-
-
 }