Selaa lähdekoodia

优化登陆跳转bug

wuxw 1 vuosi sitten
vanhempi
commit
c4692470b9

+ 0 - 61
service-api/src/main/java/com/java110/api/controller/app/AdminController.java

@@ -1,61 +0,0 @@
-/*
- * Copyright 2017-2020 吴学文 and java110 team.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.java110.api.controller.app;
-
-import com.java110.api.smo.login.IAdminLoginPropertyAccountServiceSMO;
-import com.java110.core.context.IPageData;
-import com.java110.core.context.PageData;
-import com.java110.utils.constant.CommonConstant;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * 管理员免密方式下登录至物业管理员账号下操作物业相关数据
- * <p>
- * 具体流程为 管理员需要填写当前账号密码
- * 如果传入账号密码正确 则登录至 相应物业账号下
- * add by 吴学文 2021/1/3
- **/
-@RestController
-@RequestMapping(path = "/app")
-public class AdminController {
-
-    @Autowired
-    private IAdminLoginPropertyAccountServiceSMO adminLoginPropertyAccountServiceSMOImpl;
-
-    /**
-     * 管理员免密登录至 执行的物业账户下
-     *
-     * @param request
-     */
-    @RequestMapping(path = "/adminLoginPropertyAccount", method = RequestMethod.POST)
-    public ResponseEntity<String> adminLoginPropertyAccount(HttpServletRequest request) {
-        IPageData pd = (IPageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA);
-
-        IPageData newPd = PageData.newInstance().builder(pd.getUserId(), pd.getUserName(), pd.getToken(), pd.getReqData(),
-                "login", "", "", pd.getSessionId(),
-                pd.getAppId(),
-                pd.getHeaders());
-        ResponseEntity<String> responseEntity = adminLoginPropertyAccountServiceSMOImpl.doLogin(newPd);
-        request.setAttribute(CommonConstant.CONTEXT_PAGE_DATA, newPd);
-        return responseEntity;
-    }
-}

+ 0 - 37
service-api/src/main/java/com/java110/api/smo/login/IAdminLoginPropertyAccountServiceSMO.java

@@ -1,37 +0,0 @@
-/*
- * Copyright 2017-2020 吴学文 and java110 team.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.java110.api.smo.login;
-
-import com.java110.core.context.IPageData;
-import org.springframework.http.ResponseEntity;
-
-/**
- * 管理员免密登录物业账号 接口类
- * Created by wuxw on 2019/3/20.
- */
-public interface IAdminLoginPropertyAccountServiceSMO {
-
-    /**
-     * 登录接口
-     * @param pd 页面请求对象
-     * @return
-     */
-    public ResponseEntity<String> doLogin(IPageData pd);
-
-
-
-
-}

+ 0 - 100
service-api/src/main/java/com/java110/api/smo/login/impl/AdminLoginPropertyAccountServiceSMOImpl.java

@@ -1,100 +0,0 @@
-package com.java110.api.smo.login.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.java110.api.smo.DefaultAbstractComponentSMO;
-import com.java110.api.smo.login.IAdminLoginPropertyAccountServiceSMO;
-import com.java110.core.cache.Java110RedisConfig;
-import com.java110.core.context.IPageData;
-import com.java110.core.factory.AuthenticationFactory;
-import com.java110.core.log.LoggerFactory;
-import com.java110.utils.cache.CommonCache;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.StringUtil;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.web.client.RestTemplate;
-
-
-/**
- * 登录信息实现类
- * Created by wuxw on 2019/3/20.
- */
-
-@Service("adminLoginPropertyAccountServiceSMOImpl")
-public class AdminLoginPropertyAccountServiceSMOImpl extends DefaultAbstractComponentSMO implements IAdminLoginPropertyAccountServiceSMO {
-    private final static Logger logger = LoggerFactory.getLogger(AdminLoginPropertyAccountServiceSMOImpl.class);
-
-    @Autowired
-    private RestTemplate restTemplate;
-
-
-    /**
-     * 登录处理
-     *
-     * @param pd 页面请求对象
-     * @return
-     */
-    @Override
-    public ResponseEntity<String> doLogin(IPageData pd) {
-
-        ResponseEntity<String> responseEntity = null;
-        JSONObject loginInfo = JSONObject.parseObject(pd.getReqData());
-        validate(loginInfo);
-        loginInfo.put("curPasswd", AuthenticationFactory.passwdMd5(loginInfo.getString("curPasswd")));
-        responseEntity = this.callCenterService(restTemplate, pd, loginInfo.toJSONString(), "login.adminLoginProperty", HttpMethod.POST);
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            JSONObject userInfo = JSONObject.parseObject(responseEntity.getBody());
-            pd.setToken(userInfo.getString("token"));
-            clearUserCache(userInfo);
-        }
-        return responseEntity;
-    }
-
-    /**
-     * 校验验证码
-     *
-     * @param reqJson 页面请求对象
-     * @return
-     */
-    public void validate(JSONObject reqJson) {
-
-        Assert.hasKeyAndValue(reqJson, "username", "未包含需要登录的用户名");
-        Assert.hasKeyAndValue(reqJson, "userId", "未包含需要登录的用户ID");
-        Assert.hasKeyAndValue(reqJson, "curPasswd", "未包含当前用户的密码");
-        Assert.hasKeyAndValue(reqJson, "curUserName", "未包含当前用户的用户名");
-
-    }
-
-    /**
-     * 清理用户缓存
-     *
-     * @param userInfo
-     */
-    private void clearUserCache(JSONObject userInfo) {
-        //员工商户缓存 getStoreInfo
-        String storeId = "";
-
-        String storeInfo = CommonCache.getValue("getStoreInfo" + Java110RedisConfig.GET_STORE_INFO_EXPIRE_TIME_KEY + "::" + userInfo.getString("userId"));
-        if (!StringUtil.isEmpty(storeInfo)) {
-            CommonCache.removeValue("getStoreInfo" + Java110RedisConfig.GET_STORE_INFO_EXPIRE_TIME_KEY + "::" + userInfo.getString("userId"));
-            JSONObject storeObj = JSONObject.parseObject(storeInfo);
-            storeId = storeObj.getJSONObject("msg").getString("storeId");
-            CommonCache.removeValue("getStoreEnterCommunitys" + Java110RedisConfig.GET_STORE_ENTER_COMMUNITYS_EXPIRE_TIME_KEY + "::" + storeId);
-        }
-        //员工权限
-        CommonCache.removeValue("getUserPrivileges" + Java110RedisConfig.DEFAULT_EXPIRE_TIME_KEY + "::" + userInfo.getString("userId"));
-    }
-
-
-    public RestTemplate getRestTemplate() {
-        return restTemplate;
-    }
-
-    public void setRestTemplate(RestTemplate restTemplate) {
-        this.restTemplate = restTemplate;
-    }
-}

+ 57 - 43
service-user/src/main/java/com/java110/user/cmd/login/AdminLoginPropertyCmd.java

@@ -1,7 +1,10 @@
 package com.java110.user.cmd.login;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.cache.Java110RedisConfig;
+import com.java110.core.context.CmdContextUtils;
 import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
@@ -15,12 +18,12 @@ import com.java110.intf.store.IStoreInnerServiceSMO;
 import com.java110.intf.user.IUserInnerServiceSMO;
 import com.java110.intf.user.IUserLoginInnerServiceSMO;
 import com.java110.po.user.UserLoginPo;
+import com.java110.utils.cache.CommonCache;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.constant.ResponseConstant;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.exception.SMOException;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.*;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -53,14 +56,14 @@ import java.util.Map;
                 @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
                 @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
                 @Java110ParamDoc(name = "data", type = "Object", remark = "有效数据"),
-                @Java110ParamDoc(parentNodeName = "data",name = "userId", type = "String", remark = "用户ID"),
-                @Java110ParamDoc(parentNodeName = "data",name = "token", type = "String", remark = "临时票据"),
+                @Java110ParamDoc(parentNodeName = "data", name = "userId", type = "String", remark = "用户ID"),
+                @Java110ParamDoc(parentNodeName = "data", name = "token", type = "String", remark = "临时票据"),
         }
 )
 
 @Java110ExampleDoc(
-        reqBody="{'username':'admin','userId':'123','curPassWd':'admin','curUserName':'18909711443'}",
-        resBody="{'code':0,'msg':'成功','data':{'userId':'123123','token':'123213'}}"
+        reqBody = "{'username':'admin','userId':'123','curPassWd':'admin','curUserName':'18909711443'}",
+        resBody = "{'code':0,'msg':'成功','data':{'userId':'123123','token':'123213'}}"
 )
 
 @Java110Cmd(serviceCode = "login.adminLoginProperty")
@@ -81,30 +84,22 @@ public class AdminLoginPropertyCmd extends Cmd {
         Assert.hasKeyAndValue(reqJson, "userId", "未包含需要登录的用户ID");
         Assert.hasKeyAndValue(reqJson, "curPasswd", "未包含当前用户的密码");
         Assert.hasKeyAndValue(reqJson, "curUserName", "未包含当前用户的用户名");
+        reqJson.put("curPasswd", AuthenticationFactory.passwdMd5(reqJson.getString("curPasswd")));
+        super.validateAdmin(context);
     }
 
     @Override
     public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        String userId = CmdContextUtils.getUserId(context);
         ResponseEntity<String> responseEntity = null;
         UserDto userDto = new UserDto();
         userDto.setUserName(reqJson.getString("curUserName"));
         userDto.setPassword(reqJson.getString("curPasswd"));
         List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
 
-        if (userDtos == null || userDtos.size() < 1) {
-            context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_UNAUTHORIZED, "用户或密码错误"));
-            return;
-        }
+        if (ListUtil.isNull(userDtos)) {
+            throw new CmdException("用户或密码错误");
 
-        //校验当前账户商户是不是 管理员商户
-        StoreUserDto storeUserDto = new StoreUserDto();
-        storeUserDto.setStoreTypeCd("800900000001");
-        storeUserDto.setUserId(userDtos.get(0).getUserId());
-        List<StoreUserDto> storeUserDtos = storeInnerServiceSMOImpl.getStoreUserInfo(storeUserDto);
-
-        if (storeUserDtos == null || storeUserDtos.size() < 1) {
-            context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_UNAUTHORIZED, "当前用户不是运营团队 不能免登录"));
-            return;
         }
 
         // 校验 需要登录的物业账号是否存在
@@ -116,39 +111,58 @@ public class AdminLoginPropertyCmd extends Cmd {
         Assert.listOnlyOne(userDtos, "物业账号不存在");
 
         //校验当前账户商户是不是 管理员商户
-        storeUserDto = new StoreUserDto();
-        storeUserDto.setStoreTypeCd("800900000003"); //物业账号
-        storeUserDto.setUserId(userDtos.get(0).getUserId());
-        storeUserDtos = storeInnerServiceSMOImpl.getStoreUserInfo(storeUserDto);
-
-        if (storeUserDtos == null || storeUserDtos.size() < 1) {
-            context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_UNAUTHORIZED, "需要免密登录的账号不是物业账号"));
-            return;
-        }
 
         userDto = userDtos.get(0);
-        JSONObject userInfo = JSONObject.parseObject(JSONObject.toJSONString(userDto));
+        JSONArray data = new JSONArray();
+        JSONObject userInfo = null;
         try {
             Map userMap = new HashMap();
             userMap.put(CommonConstant.LOGIN_USER_ID, userDto.getUserId());
-            userMap.put(CommonConstant.LOGIN_USER_NAME, userDto.getUserName());
+            userMap.put(CommonConstant.LOGIN_USER_NAME, userDto.getName());
             String token = AuthenticationFactory.createAndSaveToken(userMap);
-            userInfo.remove("password");
+            userInfo = BeanConvertUtil.beanCovertJson(userDto);
+            userInfo.remove("userPwd");
             userInfo.put("token", token);
-            //记录登录日志
-            UserLoginPo userLoginPo = new UserLoginPo();
-            userLoginPo.setLoginId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_loginId));
-            userLoginPo.setLoginTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
-            userLoginPo.setPassword(userDto.getPassword());
-            userLoginPo.setSource(UserLoginDto.SOURCE_WEB);
-            userLoginPo.setToken(token);
-            userLoginPo.setUserId(userInfo.getString("userId"));
-            userLoginPo.setUserName(userInfo.getString("userName"));
-            userLoginInnerServiceSMOImpl.saveUserLogin(userLoginPo);
-            responseEntity = new ResponseEntity<String>(userInfo.toJSONString(), HttpStatus.OK);
-            context.setResponseEntity(responseEntity);
+            data.add(userInfo);
         } catch (Exception e) {
+            e.printStackTrace();
             throw new SMOException(ResponseConstant.RESULT_CODE_INNER_ERROR, "系统内部错误,请联系管理员");
         }
+
+
+        //记录登录日志
+        UserLoginPo userLoginPo = new UserLoginPo();
+        userLoginPo.setLoginId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_loginId));
+        userLoginPo.setLoginTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        userLoginPo.setPassword("******");
+        userLoginPo.setSource(UserLoginDto.SOURCE_WEB);
+        userLoginPo.setToken(userInfo.getString("token"));
+        userLoginPo.setUserId(userInfo.getString("userId"));
+        userLoginPo.setUserName(userInfo.getString("userName"));
+        userLoginInnerServiceSMOImpl.saveUserLogin(userLoginPo);
+
+        responseEntity = ResultVo.createResponseEntity(data);
+        context.setResponseEntity(responseEntity);
+    }
+
+
+    /**
+     * 清理用户缓存
+     *
+     * @param userId
+     */
+    private void clearUserCache(String userId) {
+        //员工商户缓存 getStoreInfo
+        String storeId = "";
+
+        String storeInfo = CommonCache.getValue("getStoreInfo" + Java110RedisConfig.GET_STORE_INFO_EXPIRE_TIME_KEY + "::" + userId);
+        if (!StringUtil.isEmpty(storeInfo)) {
+            CommonCache.removeValue("getStoreInfo" + Java110RedisConfig.GET_STORE_INFO_EXPIRE_TIME_KEY + "::" + userId);
+            JSONObject storeObj = JSONObject.parseObject(storeInfo);
+            storeId = storeObj.getJSONObject("msg").getString("storeId");
+            CommonCache.removeValue("getStoreEnterCommunitys" + Java110RedisConfig.GET_STORE_ENTER_COMMUNITYS_EXPIRE_TIME_KEY + "::" + storeId);
+        }
+        //员工权限
+        CommonCache.removeValue("getUserPrivileges" + Java110RedisConfig.DEFAULT_EXPIRE_TIME_KEY + "::" + userId);
     }
 }