Browse Source

登录兼容性

zhaohongpeng 7 years ago
parent
commit
fbcb255ff0

+ 5 - 0
pom.xml

@@ -392,6 +392,11 @@
 			<artifactId>message-sms-api</artifactId>
 		</dependency>
 
+		<dependency>
+		<groupId>com.uas.account</groupId>
+		<artifactId>account-common</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+		</dependency>
 		<dependency>
 			<groupId>com.uas.sso</groupId>
 			<artifactId>sso-common</artifactId>

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

@@ -1,6 +1,9 @@
 package com.uas.platform.b2c.common.account.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.uas.account.entity.UserSpace;
+import com.uas.account.entity.UserSpaceDetail;
+import com.uas.account.entity.UserView;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.dao.UserDao;
 import com.uas.platform.b2c.common.account.dao.UserLoginTimeDao;
@@ -10,6 +13,7 @@ import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.model.UserLoginTime;
 import com.uas.platform.b2c.common.account.service.SigninLogService;
 import com.uas.platform.b2c.common.account.service.UserService;
+import com.uas.platform.b2c.common.account.support.LocalSSOHelp;
 import com.uas.platform.b2c.common.account.v2.service.EnterpriseService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.core.util.AgentUtils;
@@ -63,12 +67,19 @@ public class SecurityController {
 	@Autowired
 	private EnterpriseService enterpriseService;
 
+
+
 	@Autowired
 	private EnterpriseDao enterpriseDao;
 
+	@Autowired
+	private LocalSSOHelp localSSOServicImpl;
+
 	@Autowired
 	private UserDao userDao;
 
+	@Autowired
+	private LocalSSOHelp localSSOHelp;
 
 
 	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
@@ -130,7 +141,7 @@ public class SecurityController {
 			redirectUrl = request.getContextPath() + "/login/proxy";
 		}*/
 		ModelMap map = new ModelMap("content", redirectUrl);
-		map.put("baseUrl","/login/other");
+		map.put("baseUrl","/newLogin/other");
 		return map;
 	}
 	/**
@@ -236,6 +247,24 @@ public class SecurityController {
 	}
 
 
+	/**
+	 *
+	 * @Description: 设置实名认证;
+	 * @author pengzh
+	 * @date 2018/3/12 16:43
+	 * @param request, response, returnUrl
+	 * @return org.springframework.ui.ModelMap
+	 * @throws
+	 */
+	@RequestMapping(value = "/realNameAuth/page")
+	@ResponseBody
+	public ModelMap RealNameAuth(HttpServletRequest request, HttpServletResponse response, String returnUrl) throws IOException {
+		request.getSession().setAttribute(SSOConfig.SSOReferer, returnUrl );
+		String realNameAuthUrl = localSSOHelp.getRealNameAuthUrl(request,returnUrl);
+		return new ModelMap("content", realNameAuthUrl);
+	}
+
+
 	/**
 	 * 获取跨域登录的参数
 	 * 
@@ -319,7 +348,7 @@ public class SecurityController {
 	 * @param request
 	 * @param response
 	 */
-	@RequestMapping(value = "/login/other")
+	@RequestMapping(value = "/newLogin/other")
 	@ResponseBody
 	public String afterCrossLogin(HttpServletRequest request, HttpServletResponse response, UserAccount userAccount, Integer maxage) {
 		String callback =request.getParameter("jsoncallback");
@@ -352,6 +381,46 @@ public class SecurityController {
 		return "successCallback({success:'0'})";
 	}
 
+
+
+	/**
+	 * 其他地点登录后 同步登录状态
+	 * @param request
+	 * @param response
+	 */
+	@RequestMapping(value = "/login/other")
+	@ResponseBody
+	public String afterCrossOldLogin(HttpServletRequest request, HttpServletResponse response, UserView userView, Integer maxage) {
+		String callback =request.getParameter("jsoncallback");
+		response.setContentType("text/html;charset=UTF-8");
+		if (userView != null && userView.getUid() != null) {
+			SSOToken tk = new SSOToken();
+			tk.setUid(userView.getUid());
+			tk.setTime(System.currentTimeMillis());
+			tk.setData(JSON.toJSONString(userView));
+			if (null != maxage) {
+				request.setAttribute("sso_cookie_maxage", maxage);
+			}
+			SSOHelper.setSSOCookie(request, response, tk, true);
+			response.setHeader("P3P","CP='IDCDSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
+
+			response.setHeader("P3P","CP=\"CURaADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSPCOR\"");
+			User user = getOldUserByToken(tk);
+			if (user != null) {
+				if (!user.getUserPwd().equals(FlexJsonUtils.fromJson(tk.getData(), com.uas.account.entity.User.class).getPassword())){
+					return "successCallback({success:'0'})";
+				}
+				user.setIp(AgentUtils.getIp(request));
+				request.getSession().setAttribute("user", user);
+				SystemSession.setUser(user);
+				log(request, user);
+			}
+
+			return "successCallback({success:'1'})";
+		}
+		return "successCallback({success:'0'})";
+	}
+
 	/**
 	 * 获取跨域登录的参数
 	 * 
@@ -385,6 +454,7 @@ public class SecurityController {
 	private User getUserByToken(SSOToken token) {
 		User authedUser = null;
 		if (token.getData() != null) {
+			//com.uas.account.entity.User
 			UserAccount tokenUser = FlexJsonUtils.fromJson(token.getData(), UserAccount.class);
 			if (tokenUser.getMobile() != null) {
 				// UID表示所有系统公认的唯一标识,这里统一使用手机号
@@ -450,6 +520,78 @@ public class SecurityController {
 		return authedUser;
 	}
 
+
+
+
+	private User getOldUserByToken(SSOToken token) {
+		User authedUser = null;
+		if (token.getData() != null) {
+			com.uas.account.entity.User tokenUser = FlexJsonUtils.fromJson(token.getData(), com.uas.account.entity.User.class);
+			if (tokenUser.getUid() != null) {
+				// UID表示所有系统公认的唯一标识,这里统一使用手机号
+				authedUser = userService.findUserByUserTel(tokenUser.getUid());
+			} else if (tokenUser.getDialectUID() != null) {
+				// dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
+				authedUser = userService.findUserByUserUU(Long.parseLong(tokenUser.getDialectUID()));
+			} else {
+				logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getName()));
+			}
+			if (authedUser != null && authedUser.getEnterprises() != null) {
+				// 企业资料在client系统自己的唯一标识,比如en_uu
+				if (tokenUser.getSpaceDialectUID() != null) {
+					// 如果企业不存在则更新该企业
+					for (Enterprise enterprise : authedUser.getEnterprises()) {
+						if (enterprise.getUu().equals(Long.parseLong(tokenUser.getSpaceDialectUID()))){
+							authedUser.setEnterprise(enterprise);
+						}
+					}
+					if (null == authedUser.getEnterprise()) {
+						Enterprise newEnterprise = enterpriseDao.findByUu(Long.parseLong(tokenUser.getSpaceDialectUID()));
+						if (null == newEnterprise) {
+							UserSpaceDetail userSpaceDetail = null;
+							try {
+								userSpaceDetail = com.uas.account.util.AccountUtils.findByBusinessCode(tokenUser.getSpaceUID());
+							} catch (Exception e) { }
+							UserSpace userSpace = new UserSpace();
+							userSpace.setDialectUID(tokenUser.getSpaceDialectUID());
+							if (null != userSpaceDetail) {
+								enterpriseService.update(userSpace,userSpaceDetail);
+							}
+							newEnterprise = enterpriseDao.findByUu(Long.parseLong(tokenUser.getSpaceDialectUID()));
+							authedUser.setEnterprise(newEnterprise);
+						} else {
+							authedUser.getEnterprises().add(newEnterprise);
+							userDao.save(authedUser);
+							authedUser.setEnterprise(newEnterprise);
+						}
+					}
+				} else if (tokenUser.getSpaceUID() != null) {
+					for (Enterprise enterprise : authedUser.getEnterprises()) {
+						// 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
+						if (tokenUser.getSpaceUID().equals(enterprise.getEnBussinessCode())) {
+							authedUser.setEnterprise(enterprise);
+							//保存登录时间
+							List<UserLoginTime> userLoginTimeList = userLoginTimeDao.findByUserUUAndEnUU(authedUser.getUserUU(),enterprise.getUu());
+							UserLoginTime userLoginTime;
+							if (!CollectionUtils.isEmpty(userLoginTimeList)){
+								userLoginTime = userLoginTimeList.get(0);
+							}else {
+								userLoginTime = new UserLoginTime();
+								userLoginTime.setUserUU(authedUser.getUserUU());
+								userLoginTime.setEnUU(enterprise.getUu());
+							}
+							userLoginTime.setLoginTime(System.currentTimeMillis());
+							try {
+								userLoginTimeDao.save(userLoginTime);
+							}catch (Exception e){}
+							break;
+						}
+					}
+				}
+			}
+		}
+		return authedUser;
+	}
 	/**
 	 * 记录登录日志
 	 * @param request

+ 54 - 0
src/main/java/com/uas/platform/b2c/common/account/support/LocalSSOHelp.java

@@ -0,0 +1,54 @@
+package com.uas.platform.b2c.common.account.support;
+
+import com.alibaba.fastjson.JSON;
+import com.uas.sso.*;
+import com.uas.sso.common.CookieHelper;
+import com.uas.sso.common.SSOProperties;
+import com.uas.sso.common.util.HttpUtil;
+import com.uas.sso.common.util.RandomUtil;
+import com.uas.sso.service.SSOService;
+import com.uas.sso.service.SSOServiceSupport;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+@Service
+public class LocalSSOHelp extends SSOServiceSupport  {
+    protected SSOProperties properties = null;
+    private String realNameAuthUrl = "";
+
+    public LocalSSOHelp() {
+    }
+
+    /**
+     * 获取realNameAuthority
+     * @param request
+     * @param retUrl
+     * @return
+     * @throws IOException
+     */
+    public String getRealNameAuthUrl(HttpServletRequest request, String retUrl) throws IOException {
+        String url = getRealNameAuthUrl();
+        if ("".equals(url)) {
+            return null;
+        } else {
+            retUrl = URLEncoder.encode(retUrl, SSOHelper.getSSOService().getConfig().getEncoding());
+            Map<String, String> data = new HashMap();
+            data.put("appId", SSOConfig.getInstance().getAppName());
+            return HttpUtil.encodeRetURL(url, "returnURL", retUrl, data);
+        }
+    }
+
+
+    public String getRealNameAuthUrl() {
+        properties = SSOHelper.getSSOService().getConfig().getProperties();
+        return   properties == null ? this.realNameAuthUrl : this.properties.get(
+                "sso.realNameAuth.url", this.realNameAuthUrl);
+    }
+
+
+}

+ 11 - 0
src/main/java/com/uas/platform/b2c/common/account/v2/service/EnterpriseService.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.common.account.v2.service;
 
+import com.uas.account.entity.UserSpace;
+import com.uas.account.entity.UserSpaceDetail;
 import com.uas.platform.b2c.common.account.model.ChangeAdminDetail;
 import com.uas.sso.entity.UserSpaceView;
 
@@ -12,6 +14,15 @@ public interface EnterpriseService {
      */
     void update(UserSpaceView userSpaceView);
 
+
+    /**
+     * 更新企业信息
+     *
+     * @param userSpace
+     * @param userSpaceDetail
+     */
+    void update(UserSpace userSpace, UserSpaceDetail userSpaceDetail);
+
     /**
      * 更换管理员
      *

+ 48 - 0
src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/EnterpriseServiceImpl.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.common.account.v2.service.impl;
 
+import com.uas.account.entity.UserSpace;
+import com.uas.account.entity.UserSpaceDetail;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.dao.UserDao;
 import com.uas.platform.b2c.common.account.model.ChangeAdminDetail;
@@ -73,6 +75,52 @@ public class EnterpriseServiceImpl implements EnterpriseService {
         }
     }
 
+
+    @Override
+    public void update(UserSpace userSpace, UserSpaceDetail userSpaceDetail) {
+        Enterprise enterprise = new Enterprise();
+        if (null == userSpace.getDialectUID() && "".equals(userSpace.getDialectUID())){
+            logger.log("更新企业信息出错,uu为空", "值为null", null,0L);
+            return;
+        }
+        try{
+            Long.valueOf(userSpace.getDialectUID());
+        }catch (RuntimeException e) {
+            return ;
+        }
+        Enterprise oldenterprise = enterpriseDao.findByUu(Long.valueOf(userSpace.getDialectUID()));
+        enterprise.setEnAddress(userSpaceDetail.getAddress());
+        enterprise.setEnArea(userSpaceDetail.getArea());
+        enterprise.setEnCorporation(userSpaceDetail.getCorporation());
+        enterprise.setEnBussinessCode(userSpaceDetail.getBusinessCode());
+        enterprise.setEnFax(userSpaceDetail.getFax());
+        enterprise.setEnEmail(userSpaceDetail.getAdminEmail());
+        enterprise.setEnIndustry(userSpaceDetail.getIndustry());
+        enterprise.setEnName(userSpaceDetail.getName());
+        enterprise.setEnLogoUrl(userSpaceDetail.getBusinessCodeImage());
+        enterprise.setUu(Long.valueOf(userSpace.getDialectUID()));
+        Enterprise newEn = enterpriseDao.save(enterprise);
+        List<User> users = userDao.findUserByUserTel(userSpaceDetail.getAdminTel());
+        if (!CollectionUtils.isEmpty(users)){
+            User adminUser = users.get(0);
+            Set<Enterprise> enterprises = null;
+            if (null == adminUser.getEnterprises()){
+                enterprises = new HashSet<Enterprise>();
+            }else{
+                enterprises = adminUser.getEnterprises();
+            }
+            enterprises.add(newEn);
+            adminUser.setEnterprises(enterprises);
+            enterprise.setEnAdminuu(adminUser.getUserUU());
+            userDao.save(adminUser);
+        }
+        if(null != oldenterprise) {
+            logger.log("更新企业信息", enterprise.getUu()+"time: " + sdf.format(new Date()), enterprise.getUu(), 0L);
+        } else {
+            logger.log("新增企业信息", enterprise.getUu()+"time: " + sdf.format(new Date()), enterprise.getUu(), 0L);
+        }
+    }
+
     @Override
     public void changeAdmin(ChangeAdminDetail detail) {
         Enterprise enterprise = enterpriseDao.findByUu(detail.getEnUu());

+ 13 - 12
src/main/resources/dev/account.properties

@@ -1,23 +1,24 @@
 ### account center config, 
-account.us.save.url=http://192.168.253.66:8081/api/userspace
-account.user.save.url=http://192.168.253.66:8081/api/user
-account.user.getPartners.url=http://192.168.253.66:8081/api/partners
+account.us.save.url=http://192.168.253.12:32323/api/userspace
+account.user.save.url=http://192.168.253.12:32323/api/user
+account.user.getPartners.url=http://192.168.253.12:32323/api/partners
 ### sso config
 sso.app=mall
 # token secretkey
 sso.secretkey=0taQcW073Z7G628g5H
 sso.cookie.secure=false
 sso.cookie.browser=false
-sso.login.url=http://192.168.253.118:3001
-sso.logout.url=http://192.168.253.118:3001/logquit
-sso.register.url=http://192.168.253.118:3001/register/personalRegistration?appId=mall
-sso.updatePassword.url=http://192.168.253.118:3001/reset/changePasswordChooseStyle
-sso.updateMobile.url=http://192.168.253.118:3001/validation/phoneValidation
-sso.updateEmail.url=http://192.168.253.118:3001/validation/emailValidation
-sso.updateQuestion.url=http://192.168.253.118:3001/encrypted-setting/EncryptedSetting
+sso.login.url=http://192.168.253.12:32323
+sso.logout.url=http://192.168.253.12:32323/logquit
+sso.register.url=http://192.168.253.12:32323/register/personalRegistration?appId=mall
+sso.updatePassword.url=http://192.168.253.12:32323/reset/changePasswordChooseStyle
+sso.updateMobile.url=http://192.168.253.12:32323/validation/phoneValidation
+sso.updateEmail.url=http://192.168.253.12:32323/validation/emailValidation
+sso.updateQuestion.url=http://192.168.253.12:32323/encrypted-setting/EncryptedSetting
+sso.realNameAuth.url=http://192.168.253.12:32323/certification/realNameCertification
 #cross domain
-sso.ask.url=http://192.168.253.66:8081/sso/login/ask
-sso.askout.url=http://192.168.253.66:8081/sso/logout/ask
+sso.ask.url=http://192.168.253.12:32323/sso/login/ask
+sso.askout.url=http://192.168.253.12:32323/sso/logout/ask
 
 sso.authcookie.secretkey=Z318866alN6gA0piuO
 sso.client.private_key=MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIquTH9rOygR1iyMzU1CSQDXG+lJpMQgWkRWMwO3lzS+UJ3GRq1yxxD8mPFZCuItMRxP4Mvu3nvxDvsJx8lfRXk4MGswROIBPcdBAnasphN7wS5mDvDe/VBIKv+fg4j4VEnak9VUAQhS1gDtp+ZmQpCc9/gz8vueF1ueIXspAoUhAgMBAAECgYBfMP8PY1KK0Zt6nvd5NauYqQ7elg9EFJUBXU3NGmLu8Eez1NrEygk8braoy57921lffrDmKsOKvc+zn2YEoqGzbHCOuYsTDBXFCGLkj8oPeHyrs02+XuJe9j2ejhq2N04oP/TMxerFeyWnHdRCNXECrthqhwTRmGitnj2/+FLVAQJBAM93HY/5HoFlfRv9zjFy72ft/ZC60jHERXwyumbFs8z/x8sHCY1GWfgGhm1ShE1bDWAPY3W9WCFsx6nOETsHajECQQCrH8Dl7IIIHJ5D0TDisFkePnYELxpmOGlPwPOQ7hyLAdW4aB1fVIpjsWmgGOyPvmhK+b99XeLUbwpxVU7AAB3xAkAJNxJCFd+sAbUH7EMfYSqPJDwSFKpHeZ9Yf+xVqkxtO6NFOl/LPae7Y5bO/k5QHU4/yQ8y6KEkgu9vdG7Bf3fRAkEAiDlX6vDytphpmN0PyHXQC9Z3Rm9k2ZjwpM+aVXZn/HSyeQFQ2JHJNQGHby5IK0nNZloYiSlTJ/9ZVc0uSoQNUQJBAJFix2tD7b0Zq82xpeGt81rhXsofuerq1x9WM5UyYILCKJMHZw5lt58snINVzA7JxV+l60dbIgJjmRYm0yxQIAY=

+ 1 - 0
src/main/webapp/WEB-INF/spring/webmvc.xml

@@ -95,6 +95,7 @@
 			<mvc:exclude-mapping path="/**/static/**" />
 			<mvc:exclude-mapping path="/" />
 			<mvc:exclude-mapping path="/login/**" />
+			<mvc:exclude-mapping path="/newLogin/**" />
 			<mvc:exclude-mapping path="/register/**" />
 			<mvc:exclude-mapping path="/logout/**" />
 			<mvc:exclude-mapping path="/index" />

+ 18 - 0
src/main/webapp/resources/js/common/services.js

@@ -310,6 +310,24 @@ define([ 'angular', 'common/utils', 'big'], function(angular, utils, Big) {
                     alert('系统错误');
                 });
             },
+            redirectRealNameAuth : function() {
+                // 获取实名认证url
+                $http.get(rootPath + '/realNameAuth/page', {
+                    params: {
+                        returnUrl: window.location.href
+                    }
+                }).success(function(data) {
+                    if (data.content) {
+                        var newTab=window.open('about:blank');
+                        newTab.location.href=data.content;
+                    } else {
+                        alert('系统错误');
+                    }
+                }).error(function() {
+                    alert('系统错误');
+                });
+            },
+
 
 			isAuthed : function() {
 				return SessionService.get('authenticated');

+ 2 - 16
src/main/webapp/resources/js/usercenter/controllers/forstore/account_manager_ctrl.js

@@ -465,23 +465,9 @@ define(['app/app'], function (app) {
             });
           };
 
-
+			//实名认证
           $scope.updateRealAuth = function () {
-            var modalInstance = $modal.open({
-              animation: true,
-              templateUrl: $rootScope.rootPath
-              + '/static/view/vendor/modal/updateRealAuth.html',
-              controller: 'UserRealAuthCtrl',
-              resolve: {
-                user: function () {
-                  return angular.copy($rootScope.userInfo);
-                }
-              }
-            });
-
-            modalInstance.result.then(function () {
-            }, function () {
-            });
+              AuthenticationService.redirectRealNameAuth()
           };
 
           //买家中心 等级提示跳转

+ 1 - 12
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_account_management_ctrl.js

@@ -329,18 +329,7 @@ define(['app/app'], function(app) {
           };
 
           $scope.updateRealAuth = function(){
-            var modalInstance = $modal.open({
-              animation: true,
-              templateUrl: $rootScope.rootPath + '/static/view/vendor/modal/updateRealAuth.html',
-              controller: 'UserRealAuthCtrl',
-              resolve: {
-                user: function(){return angular.copy($rootScope.userInfo);}
-              }
-            });
-
-            modalInstance.result.then(function(){
-            }, function(){
-            });
+              AuthenticationService.redirectRealNameAuth();
           };
 
           //卖家中心 等级提示跳转