Browse Source

impl pwd update

AE86 5 years ago
parent
commit
df5798d9c4
19 changed files with 366 additions and 16 deletions
  1. 34 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/ConfigService.java
  2. 82 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/config/ConfigChecker.java
  3. 1 1
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/ConnectorChecker.java
  4. 1 1
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java
  5. 63 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/ConfigServiceImpl.java
  6. 17 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/ConfigVo.java
  7. 11 0
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/Manager.java
  8. 28 0
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java
  9. 5 0
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/config/PreloadCallBack.java
  10. 9 0
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/enums/HandlerEnum.java
  11. 2 0
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/PreloadTemplate.java
  12. 19 0
      dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/Config.java
  13. 1 1
      dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/ConfigModel.java
  14. 1 0
      dbsyncer-storage/src/main/java/org/dbsyncer/storage/constant/ConfigConstant.java
  15. 5 3
      dbsyncer-web/src/main/java/org/dbsyncer/web/config/WebAppConfig.java
  16. 27 3
      dbsyncer-web/src/main/java/org/dbsyncer/web/controller/pwd/PwdController.java
  17. 27 2
      dbsyncer-web/src/main/java/org/dbsyncer/web/controller/system/SystemController.java
  18. 22 0
      dbsyncer-web/src/main/resources/static/js/pwd/index.js
  19. 11 5
      dbsyncer-web/src/main/resources/templates/pwd/pwd.html

+ 34 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/ConfigService.java

@@ -0,0 +1,34 @@
+package org.dbsyncer.biz;
+
+import org.dbsyncer.biz.vo.ConfigVo;
+
+import java.util.Map;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/5/30 23:14
+ */
+public interface ConfigService {
+
+    /**
+     * 修改系统配置
+     *
+     * @param params
+     */
+    String edit(Map<String, String> params);
+
+    /**
+     * 获取系统配置
+     *
+     * @return
+     */
+    ConfigVo getConfig();
+
+    /**
+     * 获取密码
+     *
+     * @return
+     */
+    String getPassword();
+}

+ 82 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/config/ConfigChecker.java

@@ -0,0 +1,82 @@
+package org.dbsyncer.biz.checker.impl.config;
+
+import org.apache.commons.lang.StringUtils;
+import org.dbsyncer.biz.BizException;
+import org.dbsyncer.biz.checker.AbstractChecker;
+import org.dbsyncer.common.util.SHA1Util;
+import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.logger.LogService;
+import org.dbsyncer.parser.logger.LogType;
+import org.dbsyncer.parser.model.Config;
+import org.dbsyncer.parser.model.ConfigModel;
+import org.dbsyncer.storage.constant.ConfigConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
+
+import java.util.Map;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/1/8 15:17
+ */
+@Component
+public class ConfigChecker extends AbstractChecker {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Value(value = "${dbsyncer.config.login.password}")
+    private String password;
+
+    @Autowired
+    private Manager manager;
+
+    @Autowired
+    private LogService logService;
+
+    @Override
+    public ConfigModel checkAddConfigModel(Map<String, String> params) {
+        Config config = new Config();
+        config.setName("系统配置");
+        config.setType(ConfigConstant.CONFIG);
+        config.setPassword(password);
+
+        // 修改基本配置
+        this.modifyConfigModel(config, params);
+
+        manager.addConfig(config);
+        return config;
+    }
+
+    @Override
+    public ConfigModel checkEditConfigModel(Map<String, String> params) {
+        logger.info("params:{}", params);
+        Assert.notEmpty(params, "Config check params is null.");
+
+        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
+        Assert.hasText(id, "Config id is empty.");
+        Config config = manager.getConfig(id);
+        Assert.notNull(config, "配置文件为空.");
+
+        // 修改密码
+        String newPwd = params.get("newPwd");
+        String oldPwd = params.get("oldPwd");
+        if (StringUtils.isNotBlank(newPwd) && StringUtils.isNotBlank(oldPwd)) {
+            oldPwd = SHA1Util.b64_sha1(oldPwd);
+            if (!StringUtils.equals(config.getPassword(), oldPwd)) {
+                logService.log(LogType.SystemLog.WARN, "修改密码失败");
+                throw new BizException("修改密码失败");
+            }
+            config.setPassword(SHA1Util.b64_sha1(newPwd));
+        }
+
+        // 修改基本配置
+        this.modifyConfigModel(config, params);
+        return config;
+    }
+
+}

+ 1 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/ConnectorChecker.java

@@ -77,7 +77,7 @@ public class ConnectorChecker extends AbstractChecker implements ApplicationCont
 
     @Override
     public ConfigModel checkEditConfigModel(Map<String, String> params) {
-        logger.info("checkEditConfigModel connector params:{}", params);
+        logger.info("params:{}", params);
         Assert.notEmpty(params, "ConnectorChecker check params is null.");
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         Connector connector = manager.getConnector(id);

+ 1 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -75,7 +75,7 @@ public class TableGroupChecker extends AbstractChecker {
 
     @Override
     public ConfigModel checkEditConfigModel(Map<String, String> params) {
-        logger.info("checkEditConfigModel tableGroup params:{}", params);
+        logger.info("params:{}", params);
         Assert.notEmpty(params, "TableGroupChecker check params is null.");
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         TableGroup tableGroup = manager.getTableGroup(id);

+ 63 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/ConfigServiceImpl.java

@@ -0,0 +1,63 @@
+package org.dbsyncer.biz.impl;
+
+import org.dbsyncer.biz.ConfigService;
+import org.dbsyncer.biz.checker.impl.config.ConfigChecker;
+import org.dbsyncer.biz.vo.ConfigVo;
+import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.parser.logger.LogType;
+import org.dbsyncer.parser.model.Config;
+import org.dbsyncer.parser.model.ConfigModel;
+import org.dbsyncer.storage.constant.ConfigConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2019/10/17 23:20
+ */
+@Service
+public class ConfigServiceImpl extends BaseServiceImpl implements ConfigService {
+
+    @Autowired
+    private ConfigChecker configChecker;
+
+    @Override
+    public String edit(Map<String, String> params) {
+        synchronized (this) {
+            Config config = manager.getConfig(ConfigConstant.CONFIG);
+            if (null == config) {
+                configChecker.checkAddConfigModel(params);
+            }
+            ConfigModel model = configChecker.checkEditConfigModel(params);
+            manager.editConfig(model);
+            log(LogType.SystemLog.INFO, model);
+        }
+        return "修改成功.";
+    }
+
+    @Override
+    public ConfigVo getConfig() {
+        List<Config> all = manager.getConfigAll();
+        Config config = CollectionUtils.isEmpty(all) ? (Config) configChecker.checkAddConfigModel(new HashMap<>()) : all.get(0);
+        return convertConfig2Vo(config);
+    }
+
+    @Override
+    public String getPassword() {
+        List<Config> all = manager.getConfigAll();
+        Config config = CollectionUtils.isEmpty(all) ? (Config) configChecker.checkAddConfigModel(new HashMap<>()) : all.get(0);
+        return config.getPassword();
+    }
+
+    private ConfigVo convertConfig2Vo(Config config) {
+        ConfigVo configVo = new ConfigVo();
+        configVo.setId(config.getId());
+        return configVo;
+    }
+
+}

+ 17 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/ConfigVo.java

@@ -0,0 +1,17 @@
+package org.dbsyncer.biz.vo;
+
+import org.dbsyncer.parser.model.Config;
+
+public class ConfigVo extends Config {
+
+    private String id;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+}

+ 11 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/Manager.java

@@ -75,6 +75,17 @@ public interface Manager extends Executor {
 
     List<Meta> getMetaAll();
 
+    // Config
+    String addConfig(ConfigModel model);
+
+    String editConfig(ConfigModel model);
+
+    Config getConfig(String configId);
+
+    void removeConfig(String configId);
+
+    List<Config> getConfigAll();
+
     // Data
     List<Map> queryData(String id, int pageNum, int pageSize);
 

+ 28 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java

@@ -204,6 +204,34 @@ public class ManagerFactory implements Manager, ApplicationContextAware, Applica
         return operationTemplate.queryAll(queryConfig);
     }
 
+    @Override
+    public String addConfig(ConfigModel model) {
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD.getHandler()));
+    }
+
+    @Override
+    public String editConfig(ConfigModel model) {
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT.getHandler()));
+    }
+
+    @Override
+    public Config getConfig(String configId) {
+        return operationTemplate.queryObject(Config.class, configId);
+    }
+
+    @Override
+    public void removeConfig(String configId) {
+        operationTemplate.remove(new OperationConfig(configId));
+    }
+
+    @Override
+    public List<Config> getConfigAll() {
+        Config config = new Config();
+        config.setType(ConfigConstant.CONFIG);
+        QueryConfig<Config> queryConfig = new QueryConfig<>(config);
+        return operationTemplate.queryAll(queryConfig);
+    }
+
     @Override
     public List<Map> queryData(String id, int pageNum, int pageSize) {
         return dataTemplate.query(StorageEnum.DATA, id, pageNum, pageSize);

+ 5 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/config/PreloadCallBack.java

@@ -2,6 +2,7 @@ package org.dbsyncer.manager.config;
 
 import org.dbsyncer.manager.template.Callback;
 import org.dbsyncer.parser.Parser;
+import org.dbsyncer.parser.model.Config;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Meta;
 import org.dbsyncer.parser.model.TableGroup;
@@ -33,4 +34,8 @@ public class PreloadCallBack implements Callback {
         return parser.parseObject(json, Meta.class);
     }
 
+    public Object parseConfig() {
+        return parser.parseObject(json, Config.class);
+    }
+
 }

+ 9 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/enums/HandlerEnum.java

@@ -66,6 +66,15 @@ public enum HandlerEnum {
         protected Object preload(PreloadCallBack preloadCallBack) {
             return preloadCallBack.parseMeta();
         }
+    }),
+    /**
+     * 预加载Config
+     */
+    PRELOAD_CONFIG(new AbstractPreloadHandler(){
+        @Override
+        protected Object preload(PreloadCallBack preloadCallBack) {
+            return preloadCallBack.parseConfig();
+        }
     });
 
     private Handler handler;

+ 2 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/PreloadTemplate.java

@@ -82,6 +82,8 @@ public final class PreloadTemplate extends AbstractTemplate implements Applicati
         execute(new PreloadConfig(ConfigConstant.TABLE_GROUP, GroupStrategyEnum.TABLE, HandlerEnum.PRELOAD_TABLE_GROUP));
         // Load metas
         execute(new PreloadConfig(ConfigConstant.META, HandlerEnum.PRELOAD_META));
+        // Load configs
+        execute(new PreloadConfig(ConfigConstant.CONFIG, HandlerEnum.PRELOAD_CONFIG));
 
         // 启动驱动
         Meta meta = new Meta();

+ 19 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/Config.java

@@ -0,0 +1,19 @@
+package org.dbsyncer.parser.model;
+
+/**
+ * @version 1.0.0
+ * @Author AE86
+ * @Date 2020-05-29 20:13
+ */
+public class Config extends ConfigModel {
+
+    private String password;
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}

+ 1 - 1
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/ConfigModel.java

@@ -12,7 +12,7 @@ public class ConfigModel {
     private String id;
 
     /**
-     * connector/mapping/tableGroup/meta
+     * connector/mapping/tableGroup/meta/config
      *
      * @see ConfigConstant
      */

+ 1 - 0
dbsyncer-storage/src/main/java/org/dbsyncer/storage/constant/ConfigConstant.java

@@ -24,6 +24,7 @@ public class ConfigConstant {
     public static final String MAPPING = "mapping";
     public static final String TABLE_GROUP = "tableGroup";
     public static final String META = "meta";
+    public static final String CONFIG = "config";
 
     /**
      * 数据

+ 5 - 3
dbsyncer-web/src/main/java/org/dbsyncer/web/config/WebAppConfig.java

@@ -1,11 +1,13 @@
 package org.dbsyncer.web.config;
 
 import org.apache.commons.lang.StringUtils;
+import org.dbsyncer.biz.ConfigService;
 import org.dbsyncer.biz.vo.RestResult;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.common.util.SHA1Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -58,8 +60,8 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
     @Value(value = "${dbsyncer.config.login.username}")
     private String username;
 
-    @Value(value = "${dbsyncer.config.login.password}")
-    private String password;
+    @Autowired
+    private ConfigService configService;
 
     @Override
     protected void configure(HttpSecurity http) throws Exception { //配置策略
@@ -154,7 +156,7 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
         String password = (String) authentication.getCredentials();
         password = SHA1Util.b64_sha1(password);
 
-        if (!StringUtils.equals(username, this.username) || !StringUtils.equals(password, this.password)) {
+        if (!StringUtils.equals(username, this.username) || !StringUtils.equals(configService.getPassword(), password)) {
             throw new BadCredentialsException("对不起,您输入的帐号或密码错误");
         }
         return new UsernamePasswordAuthenticationToken(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));

+ 27 - 3
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/pwd/PwdController.java

@@ -1,10 +1,19 @@
 package org.dbsyncer.web.controller.pwd;
 
+import org.dbsyncer.biz.ConfigService;
+import org.dbsyncer.biz.vo.RestResult;
+import org.dbsyncer.web.controller.BaseController;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
 
 /**
  * 密码修改处理
@@ -14,14 +23,29 @@ import org.springframework.web.bind.annotation.RequestMapping;
  */
 @Controller
 @RequestMapping(value = "/pwd")
-public class PwdController {
+public class PwdController extends BaseController {
 
 	private final Logger logger = LoggerFactory.getLogger(getClass());
-	
+
+	@Autowired
+	private ConfigService configService;
+
 	@RequestMapping("")
 	public String index(ModelMap model) {
+		model.put("config", configService.getConfig());
 		return "pwd/pwd";
 	}
 
-	
+	@PostMapping("/edit")
+	@ResponseBody
+	public RestResult edit(HttpServletRequest request) {
+		try {
+			Map<String, String> params = getParams(request);
+			return RestResult.restSuccess(configService.edit(params));
+		} catch (Exception e) {
+			logger.error(e.getLocalizedMessage(), e.getClass());
+			return RestResult.restFail(e.getMessage());
+		}
+	}
+
 }

+ 27 - 2
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/system/SystemController.java

@@ -1,20 +1,45 @@
 package org.dbsyncer.web.controller.system;
 
+import org.dbsyncer.biz.ConfigService;
+import org.dbsyncer.biz.vo.RestResult;
+import org.dbsyncer.web.controller.BaseController;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
 
 @Controller
 @RequestMapping(value = "/system")
-public class SystemController {
+public class SystemController extends BaseController {
 
 	private final Logger logger = LoggerFactory.getLogger(getClass());
-    
+
+	@Autowired
+	private ConfigService configService;
+
 	@RequestMapping("")
 	public String index(ModelMap model) {
+		model.put("config", configService.getConfig());
 		return "system/system";
 	}
 
+	@PostMapping("/edit")
+	@ResponseBody
+	public RestResult edit(HttpServletRequest request) {
+		try {
+			Map<String, String> params = getParams(request);
+			return RestResult.restSuccess(configService.edit(params));
+		} catch (Exception e) {
+			logger.error(e.getLocalizedMessage(), e.getClass());
+			return RestResult.restFail(e.getMessage());
+		}
+	}
+
 }

+ 22 - 0
dbsyncer-web/src/main/resources/static/js/pwd/index.js

@@ -0,0 +1,22 @@
+function submit(data) {
+    doPoster("/pwd/edit", data, function (data) {
+        if (data.success == true) {
+            bootGrowl("修改成功!", "success");
+        } else {
+            bootGrowl(data.resultValue, "danger");
+        }
+        $initContainer.load('/pwd');
+    });
+}
+
+$(function () {
+    //保存
+    $("#updatePwdSubBtn").click(function () {
+        var $form = $("#configEditForm");
+        if ($form.formValidate() == true) {
+            var data = $form.serializeJson();
+            submit(data);
+        }
+    });
+
+})

+ 11 - 5
dbsyncer-web/src/main/resources/templates/pwd/pwd.html

@@ -1,9 +1,9 @@
 <!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml"
-      lang="zh-CN">
+      xmlns:th="http://www.thymeleaf.org" lang="zh-CN">
 
 <div class="container">
-    <form class="form-horizontal" role="form">
+    <form id="configEditForm" class="form-horizontal" role="form">
         <div class="row text-center">
             <h3>修改密码</h3>
         </div>
@@ -12,16 +12,21 @@
         <div class="row">
             <div class="col-md-3"></div>
             <div class="col-md-6">
+                <!-- 隐藏表单值 -->
+                <div class="form-group hidden">
+                    <input name="id" type="text" th:value="${config?.id}"/>
+                </div>
+
                 <div class="form-group">
                     <label class="col-sm-4 control-label">原密码 <strong class="driverVerifcateRequired">*</strong></label>
                     <div class="col-sm-8">
-                        <input type="password" class="form-control" name="pwd" maxlength="32" dbsyncer-valid="require" placeholder="请输入原密码">
+                        <input type="password" class="form-control" name="oldPwd" maxlength="32" dbsyncer-valid="require" placeholder="请输入原密码">
                     </div>
                 </div>
                 <div class="form-group">
                     <label class="col-sm-4 control-label">新密码 <strong class="driverVerifcateRequired">*</strong></label>
                     <div class="col-sm-8">
-                        <input type="password" class="form-control" name="newpwd" maxlength="32" dbsyncer-valid="require" placeholder="请输入新密码">
+                        <input type="password" class="form-control" name="newPwd" maxlength="32" dbsyncer-valid="require" placeholder="请输入新密码">
                     </div>
                 </div>
                 <div class="form-group">
@@ -30,7 +35,7 @@
                         <button id="updatePwdSubBtn" type="button" class="btn btn-primary">
                             <span class="fa fa-save"></span>保存
                         </button>
-                        <button type="reset" class="btn btn-default">重置</button>
+                        <button id="updatePwdRestBtn" type="reset" class="btn btn-default">重置</button>
                     </div>
                 </div>
             </div>
@@ -39,4 +44,5 @@
     </form>
 </div>
 
+<script th:src="@{/js/pwd/index.js}"></script>
 </html>