From 1fdfc7a7fbf7c73fe7cb4d5d719c8ad39201886b Mon Sep 17 00:00:00 2001 From: root <8964602+zxylbj@user.noreply.gitee.com> Date: Tue, 15 Jun 2021 16:41:26 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=9C=AA=E7=AC=A6=E5=90=88=E9=A1=B9?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adc-da-main/.gitignore | 5 + .../com/adc/da/main/generate/CodeGen.java | 6 +- .../main/resources/application-dev.properties | 7 +- .../SarStandUnqualifiedController.java | 23 ++++ .../dao/SarStandUnqualifiedDao.java | 16 +++ .../entity/SarStandUnqualified.java | 102 ++++++++++++++++++ .../service/ISarStandUnqualifiedService.java | 16 +++ .../impl/SarStandUnqualifiedServiceImpl.java | 20 ++++ .../com/adc/da/slrs/zxy/ZxyController.java | 18 ++++ .../adc-da-slrs/SarStandUnqualifiedMapper.xml | 5 + .../SarStandUnqualifiedMapper.xml | 5 + 11 files changed, 217 insertions(+), 6 deletions(-) create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/dao/SarStandUnqualifiedDao.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/entity/SarStandUnqualified.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/ISarStandUnqualifiedService.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/impl/SarStandUnqualifiedServiceImpl.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java create mode 100644 adc-da-slrs/src/main/resources/mybatis/mapper/adc-da-slrs/SarStandUnqualifiedMapper.xml create mode 100644 adc-da-slrs/src/main/resources/mybatis/mapper/sarStandUnqualified/SarStandUnqualifiedMapper.xml diff --git a/adc-da-main/.gitignore b/adc-da-main/.gitignore index 549e00a2..45ae2499 100644 --- a/adc-da-main/.gitignore +++ b/adc-da-main/.gitignore @@ -31,3 +31,8 @@ build/ ### VS Code ### .vscode/ + +src/main/resources/application.properties +src/main/resources/** + +** diff --git a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java index 40e96151..0f660d81 100644 --- a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java +++ b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java @@ -22,11 +22,11 @@ public class CodeGen { // x.x.x.x:3306/xxxx --MYSQL // 192.168.10.140:1521:foton_slrs_test - private static final String DB_IP="127.0.0.1:3306/foton_slrs"; + private static final String DB_IP="127.0.0.1:3306/foton_slrs_test"; private static final String DB_USER="root"; - private static final String DB_PWD="root"; + private static final String DB_PWD="Zxy20010202"; /** @@ -75,7 +75,7 @@ public class CodeGen { DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://"+DB_IP+"?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false"); //dsc.setSchemaName("public");//PostgreSQL schemaName - dsc.setDriverName("com.mysql.jdbc.Driver"); + dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername(DB_USER); dsc.setPassword(DB_PWD); mpg.setDataSource(dsc); diff --git a/adc-da-main/src/main/resources/application-dev.properties b/adc-da-main/src/main/resources/application-dev.properties index 1439004b..f31c1760 100644 --- a/adc-da-main/src/main/resources/application-dev.properties +++ b/adc-da-main/src/main/resources/application-dev.properties @@ -3,10 +3,11 @@ # 数据库配置 #============================================= spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver -spring.datasource.url = jdbc:mysql://101.36.227.22:33050/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false +#spring.datasource.url = jdbc:mysql://101.36.227.22:33050/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false +spring.datasource.url = jdbc:mysql://localhost:3306/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false spring.datasource.username = root -spring.datasource.password = 1q2w3e4r - +#spring.datasource.password = 1q2w3e4r +spring.datasource.password=Zxy20010202 #============================================== # 应用设置 spring.application.name=FotonLAWSSystem diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java new file mode 100644 index 00000000..8336f8a6 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java @@ -0,0 +1,23 @@ +package com.adc.da.slrs.sarStandUnqualified.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import com.adc.da.slrs.sarStandUnqualified.entity.SarStandUnqualified; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RestController; +import com.adc.da.base.web.BaseController; + +/** +*

+ * 前端控制器 + *

+* +* @author super_liu +* @since 2021-06-15 +*/ +@RestController +@Api(description = "|SarStandUnqualified|") +@RequestMapping("/sarStandUnqualified/sar-stand-unqualified") +public class SarStandUnqualifiedController extends BaseController { + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/dao/SarStandUnqualifiedDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/dao/SarStandUnqualifiedDao.java new file mode 100644 index 00000000..d91792c6 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/dao/SarStandUnqualifiedDao.java @@ -0,0 +1,16 @@ +package com.adc.da.slrs.sarStandUnqualified.dao; + +import com.adc.da.slrs.sarStandUnqualified.entity.SarStandUnqualified; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author super_liu + * @since 2021-06-15 + */ +public interface SarStandUnqualifiedDao extends BaseMapper { + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/entity/SarStandUnqualified.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/entity/SarStandUnqualified.java new file mode 100644 index 00000000..d0ea4bc6 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/entity/SarStandUnqualified.java @@ -0,0 +1,102 @@ +package com.adc.da.slrs.sarStandUnqualified.entity; + +import com.adc.da.base.entity.BaseEntity; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author super_liu + * @since 2021-06-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@ApiModel(value="SarStandUnqualified对象", description="") +public class SarStandUnqualified extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "创建部门") + @TableField("CREATE_DEPT_ID") + private String createDeptId; + + @ApiModelProperty(value = "创建人") + @TableField("CREATE_BY_ID") + private String createById; + + @ApiModelProperty(value = "创建时间") + @TableField("CREATE_TIME") + private LocalDateTime createTime; + + @ApiModelProperty(value = "关闭状态(1为开启,2为关闭)") + @TableField("CLOSE_STATE") + private Integer closeState; + + @ApiModelProperty(value = "实际关闭时间") + @TableField("ACTUAL_CLOSE_TIME") + private LocalDateTime actualCloseTime; + + @ApiModelProperty(value = "计划关闭时间") + @TableField("PLAN_CLOSE_TIME") + private LocalDateTime planCloseTime; + + @ApiModelProperty(value = "质量工程师") + @TableField("QA_ENGINEER") + private String qaEngineer; + + @ApiModelProperty(value = "认证工程师") + @TableField("AUTH_ENGINEER") + private String authEngineer; + + @ApiModelProperty(value = "责任工程师") + @TableField("DUTY_ENGINEER") + private String dutyEngineer; + + @ApiModelProperty(value = "责任部门") + @TableField("RESPONSIBLE_UNIT") + private String responsibleUnit; + + @ApiModelProperty(value = "项目名称") + @TableField("PRODUCT_NAME") + private String productName; + + @ApiModelProperty(value = "产品线") + @TableField("PRODUCT_LINE") + private String productLine; + + @ApiModelProperty(value = "产品类型(research为在研产品,product为在产产品)") + @TableField("PRODUCT_TYPE") + private String productType; + + @ApiModelProperty(value = "条款名称") + @TableField("ITEMS_NAME") + private String itemsName; + + @ApiModelProperty(value = "条款号") + @TableField("ITEMS_NUM") + private String itemsNum; + + @ApiModelProperty(value = "标准名称") + @TableField("STAND_NAME") + private String standName; + + @ApiModelProperty(value = "标准ID") + @TableField("STAND_ID") + private String standId; + + @ApiModelProperty(value = "主键") + @TableId("ID") + private String id; + + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/ISarStandUnqualifiedService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/ISarStandUnqualifiedService.java new file mode 100644 index 00000000..765bc8bc --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/ISarStandUnqualifiedService.java @@ -0,0 +1,16 @@ +package com.adc.da.slrs.sarStandUnqualified.service; + +import com.adc.da.slrs.sarStandUnqualified.entity.SarStandUnqualified; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author super_liu + * @since 2021-06-15 + */ +public interface ISarStandUnqualifiedService extends IService { + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/impl/SarStandUnqualifiedServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/impl/SarStandUnqualifiedServiceImpl.java new file mode 100644 index 00000000..66d459c9 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/service/impl/SarStandUnqualifiedServiceImpl.java @@ -0,0 +1,20 @@ +package com.adc.da.slrs.sarStandUnqualified.service.impl; + +import com.adc.da.slrs.sarStandUnqualified.entity.SarStandUnqualified; +import com.adc.da.slrs.sarStandUnqualified.dao.SarStandUnqualifiedDao; +import com.adc.da.slrs.sarStandUnqualified.service.ISarStandUnqualifiedService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author super_liu + * @since 2021-06-15 + */ +@Service +public class SarStandUnqualifiedServiceImpl extends ServiceImpl implements ISarStandUnqualifiedService { + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java new file mode 100644 index 00000000..d0a14bbb --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java @@ -0,0 +1,18 @@ +package com.adc.da.slrs.zxy; + +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "赵肖云测试") +@RequestMapping("/zxy") +@RestController +public class ZxyController { + @GetMapping("/test") + public String a(){ + return "她和我有啥关系"; + } +} diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/adc-da-slrs/SarStandUnqualifiedMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/adc-da-slrs/SarStandUnqualifiedMapper.xml new file mode 100644 index 00000000..f8a704c8 --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/adc-da-slrs/SarStandUnqualifiedMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarStandUnqualified/SarStandUnqualifiedMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarStandUnqualified/SarStandUnqualifiedMapper.xml new file mode 100644 index 00000000..b90da545 --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarStandUnqualified/SarStandUnqualifiedMapper.xml @@ -0,0 +1,5 @@ + + + + + From 689a394a5a64718700df14f5509c1afed352310d Mon Sep 17 00:00:00 2001 From: root <8964602+zxylbj@user.noreply.gitee.com> Date: Tue, 15 Jun 2021 16:42:29 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adc-da-main/src/main/resources/application-dev.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adc-da-main/src/main/resources/application-dev.properties b/adc-da-main/src/main/resources/application-dev.properties index f31c1760..49fb12ec 100644 --- a/adc-da-main/src/main/resources/application-dev.properties +++ b/adc-da-main/src/main/resources/application-dev.properties @@ -3,8 +3,8 @@ # 数据库配置 #============================================= spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver -#spring.datasource.url = jdbc:mysql://101.36.227.22:33050/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false -spring.datasource.url = jdbc:mysql://localhost:3306/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false +spring.datasource.url = jdbc:mysql://101.36.227.22:33050/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false +#spring.datasource.url = jdbc:mysql://localhost:3306/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false spring.datasource.username = root #spring.datasource.password = 1q2w3e4r spring.datasource.password=Zxy20010202 From c0a1708f470b2c8411b4dd691d55c58402348d02 Mon Sep 17 00:00:00 2001 From: root <8964602+zxylbj@user.noreply.gitee.com> Date: Tue, 15 Jun 2021 17:05:31 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=8F=96=E6=B6=88main=E6=A8=A1=E5=9D=97git?= =?UTF-8?q?=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + adc-da-main/.gitignore | 38 --- .../.mvn/wrapper/MavenWrapperDownloader.java | 118 ------- adc-da-main/.mvn/wrapper/maven-wrapper.jar | Bin 50710 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 - adc-da-main/mvnw | 310 ------------------ adc-da-main/mvnw.cmd | 182 ---------- adc-da-main/pom.xml | 90 ----- .../java/com/adc/da/AdcDaApplication.java | 22 -- .../java/com/adc/da/ServletInitializer.java | 16 - .../main/advice/AdcDaBaseExceptionAdvice.java | 38 --- .../da/main/advice/ShiroExceptionAdvice.java | 41 --- .../da/main/config/DefinitionUrlConfig.java | 44 --- .../adc/da/main/config/MybatisPlusConfig.java | 22 -- .../da/main/config/RestTemplateConfig.java | 50 --- .../com/adc/da/main/config/ShiroConfig.java | 151 --------- .../da/main/config/ShiroConfiguration.java | 92 ------ .../com/adc/da/main/config/SwaggerConfig.java | 67 ---- .../com/adc/da/main/config/WebConfig.java | 105 ------ .../filter/AuthFormAuthenticationFilter.java | 25 -- .../com/adc/da/main/generate/CodeGen.java | 158 --------- .../com/adc/da/main/generate/CodeUtil.java | 15 - .../main/resources/application-dev.properties | 45 --- .../resources/application-prod.properties | 38 --- .../resources/application-test.properties | 38 --- .../src/main/resources/application.properties | 146 --------- adc-da-main/src/main/resources/banner.txt | 9 - .../src/main/resources/cache/ehcache.xml | 66 ---- .../src/main/resources/logback-spring.xml | 202 ------------ .../src/main/resources/logo/logo_white.png | Bin 141020 -> 0 bytes .../main/resources/mybatis/mybatis-config.xml | 14 - .../src/main/resources/temp/entity.java.ftl | 152 --------- .../src/main/resources/temp/mapper.java.ftl | 20 -- .../src/main/resources/temp/service.java.ftl | 20 -- .../resources/templates/controller.java.ftl | 41 --- .../main/resources/templates/entity.java.ftl | 152 --------- .../main/resources/templates/mapper.java.ftl | 20 -- .../main/resources/templates/mapper.xml.ftl | 39 --- .../main/resources/templates/service.java.ftl | 20 -- .../resources/templates/serviceImpl.java.ftl | 26 -- .../src/main/resources/ueditor/config.json | 97 ------ .../src/main/resources/white/uploadWhite.txt | 12 - .../src/main/resources/white/xssWhite.txt | 1 - .../SarStandUnqualifiedController.java | 7 +- 44 files changed, 7 insertions(+), 2746 deletions(-) delete mode 100644 adc-da-main/.gitignore delete mode 100644 adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java delete mode 100644 adc-da-main/.mvn/wrapper/maven-wrapper.jar delete mode 100644 adc-da-main/.mvn/wrapper/maven-wrapper.properties delete mode 100644 adc-da-main/mvnw delete mode 100644 adc-da-main/mvnw.cmd delete mode 100644 adc-da-main/pom.xml delete mode 100644 adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/ServletInitializer.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java delete mode 100644 adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java delete mode 100644 adc-da-main/src/main/resources/application-dev.properties delete mode 100644 adc-da-main/src/main/resources/application-prod.properties delete mode 100644 adc-da-main/src/main/resources/application-test.properties delete mode 100644 adc-da-main/src/main/resources/application.properties delete mode 100644 adc-da-main/src/main/resources/banner.txt delete mode 100644 adc-da-main/src/main/resources/cache/ehcache.xml delete mode 100644 adc-da-main/src/main/resources/logback-spring.xml delete mode 100644 adc-da-main/src/main/resources/logo/logo_white.png delete mode 100644 adc-da-main/src/main/resources/mybatis/mybatis-config.xml delete mode 100644 adc-da-main/src/main/resources/temp/entity.java.ftl delete mode 100644 adc-da-main/src/main/resources/temp/mapper.java.ftl delete mode 100644 adc-da-main/src/main/resources/temp/service.java.ftl delete mode 100644 adc-da-main/src/main/resources/templates/controller.java.ftl delete mode 100644 adc-da-main/src/main/resources/templates/entity.java.ftl delete mode 100644 adc-da-main/src/main/resources/templates/mapper.java.ftl delete mode 100644 adc-da-main/src/main/resources/templates/mapper.xml.ftl delete mode 100644 adc-da-main/src/main/resources/templates/service.java.ftl delete mode 100644 adc-da-main/src/main/resources/templates/serviceImpl.java.ftl delete mode 100644 adc-da-main/src/main/resources/ueditor/config.json delete mode 100644 adc-da-main/src/main/resources/white/uploadWhite.txt delete mode 100644 adc-da-main/src/main/resources/white/xssWhite.txt diff --git a/.gitignore b/.gitignore index 3e0d9aa6..f938eab5 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ target *.bpmn/ *logs/ .metadata + +adc-da-main/** \ No newline at end of file diff --git a/adc-da-main/.gitignore b/adc-da-main/.gitignore deleted file mode 100644 index 45ae2499..00000000 --- a/adc-da-main/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ - -src/main/resources/application.properties -src/main/resources/** - -** diff --git a/adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java b/adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba..00000000 --- a/adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * 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 - * - * https://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. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/adc-da-main/.mvn/wrapper/maven-wrapper.jar b/adc-da-main/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50710 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 EfAhh=DF6Tf diff --git a/adc-da-main/.mvn/wrapper/maven-wrapper.properties b/adc-da-main/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572c..00000000 --- a/adc-da-main/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/adc-da-main/mvnw b/adc-da-main/mvnw deleted file mode 100644 index a16b5431..00000000 --- a/adc-da-main/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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 -# -# https://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. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/adc-da-main/mvnw.cmd b/adc-da-main/mvnw.cmd deleted file mode 100644 index c8d43372..00000000 --- a/adc-da-main/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/adc-da-main/pom.xml b/adc-da-main/pom.xml deleted file mode 100644 index bb363e53..00000000 --- a/adc-da-main/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - 4.0.0 - - - com.adc - foton-slrs-system-rest - 3.0.0 - - com.adc - adc-da-main - adc-da-main - laws system rest main - - jar - - - 1.8 - - - - - org.springframework.boot - spring-boot-starter - - - com.adc - adc-da-slrs - 3.0.0 - - - com.adc - adc-da-activiti - 3.0.0 - - - com.adc - adc-da-sys - 3.0.0 - - - com.adc - adc-da-base - 3.0.0 - - - com.adc - adc-da-jwtLogin - 3.1.0 - - - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - 2.2.0.RELEASE - - - - org.springframework.cloud - spring-cloud-starter-openfeign - 2.2.0.RELEASE - - - - - - - - - - - - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - - - diff --git a/adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java b/adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java deleted file mode 100644 index f2d62d02..00000000 --- a/adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.adc.da; - -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -import org.springframework.boot.web.servlet.ServletComponentScan; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; -import org.springframework.cloud.openfeign.EnableFeignClients; - -@EnableEurekaClient -@EnableFeignClients -@ServletComponentScan -@SpringBootApplication(exclude = SecurityAutoConfiguration.class) -@MapperScan(value = {"com.adc.da.file.store"}) -public class AdcDaApplication { - - public static void main(String[] args) { - SpringApplication.run(AdcDaApplication.class, args); - } - -} diff --git a/adc-da-main/src/main/java/com/adc/da/ServletInitializer.java b/adc-da-main/src/main/java/com/adc/da/ServletInitializer.java deleted file mode 100644 index 9413d00e..00000000 --- a/adc-da-main/src/main/java/com/adc/da/ServletInitializer.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.adc.da; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Springboot打war包的启动口 - */ -public class ServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { - // 注意这里要指向原先用main方法执行的Application启动类 - return builder.sources(AdcDaApplication.class); - } -} \ No newline at end of file diff --git a/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java b/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java deleted file mode 100644 index 59b6ce91..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.adc.da.main.advice; - -import com.adc.da.exception.AdcDaBaseException; -import com.adc.da.http.ResponseMessage; -import com.adc.da.http.ResponseMessageCodeEnum; -import com.adc.da.http.Result; -import lombok.extern.slf4j.Slf4j; -import org.springframework.core.annotation.Order; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Slf4j -@ControllerAdvice -@Order(value=4) -public class AdcDaBaseExceptionAdvice { - - - @ResponseStatus(HttpStatus.OK) - @ExceptionHandler(AdcDaBaseException.class) - @ResponseBody - public ResponseMessage handlerAdcDaBaseException(AdcDaBaseException exception) { - log.warn(exception.getMessage(), exception); - return Result.error(exception.getErrorCode(), exception.getMessage()); - } - - @ResponseStatus(HttpStatus.OK) - @ExceptionHandler(Exception.class) - @ResponseBody - public ResponseMessage handlerAdcDaBaseException(Exception exception) { - log.error(exception.getMessage(), exception); - // TODO 在数据库中记录程序异常,这个地方的异常是未处理的异常,需要管理员查看并进行处理以防重复出现 - return Result.error(ResponseMessageCodeEnum.ERROR.getCode(), "程序异常,请重试。如果重复出现请联系管理员处理!"); - } - -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java b/adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java deleted file mode 100644 index 65bed1de..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.adc.da.main.advice; - -import com.adc.da.http.ResponseMessage; -import com.adc.da.http.Result; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.authc.IncorrectCredentialsException; -import org.apache.shiro.authc.UnknownAccountException; -import org.apache.shiro.authz.UnauthenticatedException; -import org.apache.shiro.authz.UnauthorizedException; -import org.springframework.core.annotation.Order; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Slf4j -@ControllerAdvice -@Order(value=2) -public class ShiroExceptionAdvice { - - - @ResponseStatus(HttpStatus.UNAUTHORIZED) - @ExceptionHandler({AuthenticationException.class, UnknownAccountException.class, - UnauthenticatedException.class, IncorrectCredentialsException.class}) - @ResponseBody - public ResponseMessage unauthorized(Exception exception) { - log.warn(exception.getMessage(), exception); - log.info("catch UnknownAccountException"); - return Result.error("A404", "无权访问"); - } - - @ResponseStatus(HttpStatus.UNAUTHORIZED) - @ExceptionHandler(UnauthorizedException.class) - @ResponseBody - public ResponseMessage unauthorized1(UnauthorizedException exception) { - log.warn(exception.getMessage(), exception); - return Result.error("A404","无权访问"); - } -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java deleted file mode 100644 index 2f338bb1..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.adc.da.main.config; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * shiro 自定义URL规则设置 - */ -public class DefinitionUrlConfig { - - - - /** - * 匿名用户,无需登录 - */ - private static final String ANON = "anon"; - - - - // 拦截器 - //rest:比如/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。 - //port:比如/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。 - //perms:比如/admins/user/**=perms[user:add:*],perms参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,比如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。 - //roles:比如/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,比如/admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。//要实现or的效果看http://zgzty.blog.163.com/blog/static/83831226201302983358670/ - //anon:比如/admins/**=anon 没有参数,表示可以匿名使用。 - //authc:比如/admins/user/**=authc表示需要认证才能使用,没有参数 - //authcBasic:比如/admins/user/**=authcBasic没有参数表示httpBasic认证 - //ssl:比如/admins/user/**=ssl没有参数,表示安全的url请求,协议为https - //user:比如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查 - public static Map definitionUrlOptions(){ - Map filterRuleMap = new LinkedHashMap<>(); - //TODO 此处设置URL过滤规则 默认是全部请求进行拦截,此处设置为不拦截的URL地址 - filterRuleMap.put("/api/login",ANON);//登录接口 - // swagger接口文档 - filterRuleMap.put("/v2/api-docs", "anon"); - filterRuleMap.put("/webjars/**", "anon"); - filterRuleMap.put("/swagger-resources/**", "anon"); - filterRuleMap.put("/swagger-ui.html", "anon"); - filterRuleMap.put("/doc.html", "anon"); - return filterRuleMap; - } - - -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java deleted file mode 100644 index 0ca71a89..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.adc.da.main.config; - -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * Mybatis Plus 配置 - */ -@EnableTransactionManagement -@Configuration -@MapperScan("com.adc.da.**.dao") -public class MybatisPlusConfig { - - @Bean - public PaginationInterceptor paginationInterceptor() { - return new PaginationInterceptor(); - } - -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java deleted file mode 100644 index 870c415d..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.adc.da.main.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.ClientHttpRequestFactory; -import org.springframework.http.client.SimpleClientHttpRequestFactory; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.web.client.RestTemplate; - -import java.nio.charset.Charset; -import java.util.Iterator; -import java.util.List; - -/** - * restTemplate设置 - */ -@Configuration -public class RestTemplateConfig { - - private static final Logger logger = LoggerFactory.getLogger(RestTemplateConfig.class); - - @Bean - public RestTemplate restTemplate(ClientHttpRequestFactory factory){ - RestTemplate restTemplate = new RestTemplate(factory); - // 使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为"ISO-8859-1") - List> messageConverters = restTemplate.getMessageConverters(); - Iterator> iterator = messageConverters.iterator(); - while (iterator.hasNext()) { - HttpMessageConverter converter = iterator.next(); - if (converter instanceof StringHttpMessageConverter) { - iterator.remove(); - } - } - messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8"))); - - return restTemplate; - } - - @Bean - public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ - SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); - factory.setReadTimeout(50000);//单位为ms - factory.setConnectTimeout(50000);//单位为ms - return factory; - } - -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java deleted file mode 100644 index 4bfc489b..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.adc.da.main.config; - -import com.adc.da.login.security.JWTFilter; -import com.adc.da.login.security.JWTRealm; -import org.apache.shiro.cache.ehcache.EhCacheManager; -import org.apache.shiro.mgt.DefaultSecurityManager; -import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; -import org.apache.shiro.mgt.DefaultSubjectDAO; -import org.apache.shiro.spring.LifecycleBeanPostProcessor; -import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; -import org.apache.shiro.spring.web.ShiroFilterFactoryBean; -import org.apache.shiro.web.mgt.DefaultWebSecurityManager; -import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; -import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.DependsOn; -import org.springframework.core.annotation.Order; -import org.springframework.core.io.ClassPathResource; - -import javax.servlet.Filter; -import java.util.HashMap; -import java.util.Map; - -@Configuration -@Order(value=1) -public class ShiroConfig { - - private static final String JWT_FILTER_NAME = "jwt"; - - private static final String URL_SUFFIX="/api"; - - /** - * 自定义realm,实现登录授权流程 - * @return - */ - @Bean(name="jwtRealm") - public JWTRealm jwtRealm() { - return new JWTRealm(); - } - - /** - * 配置securityManager 管理subject(默认),并把自定义realm交由manager - */ - @Bean - public DefaultSecurityManager securityManager() { - DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); - // 设置realm. - securityManager.setRealm(jwtRealm()); - //注入缓存管理器 - securityManager.setCacheManager(ehCacheManager()); - /* - * 关闭shiro自带的session,详情见文档 - * http://shiro.apache.org/session-management.html#SessionManagement-StatelessApplications%28Sessionless%29 - */ - DefaultSubjectDAO defaultSubjectDAO = new DefaultSubjectDAO(); - DefaultSessionStorageEvaluator storageEvaluator = new DefaultSessionStorageEvaluator(); - storageEvaluator.setSessionStorageEnabled(false); - defaultSubjectDAO.setSessionStorageEvaluator(storageEvaluator); - securityManager.setSubjectDAO(defaultSubjectDAO); - - return securityManager; - } - - /** - * 拦截链 - */ - @Bean - public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultSecurityManager securityManager) { - ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); - shiroFilterFactoryBean.setSecurityManager(securityManager); - shiroFilterFactoryBean.setFilters(filterMap()); - shiroFilterFactoryBean.setFilterChainDefinitionMap(definitionMap()); - - return shiroFilterFactoryBean; - } - - /** - * 自定义拦截器,处理所有请求 - */ - private Map filterMap() { - Map filterMap = new HashMap<>(); - filterMap.put(JWT_FILTER_NAME, new JWTFilter()); - return filterMap; - } - - /** - * url拦截规则 - */ - private Map definitionMap() { - // 拦截器 - //rest:比如/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。 - //port:比如/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。 - //perms:比如/admins/user/**=perms[user:add:*],perms参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,比如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。 - //roles:比如/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,比如/admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。//要实现or的效果看http://zgzty.blog.163.com/blog/static/83831226201302983358670/ - //anon:比如/admins/**=anon 没有参数,表示可以匿名使用。 - //authc:比如/admins/user/**=authc表示需要认证才能使用,没有参数 - //authcBasic:比如/admins/user/**=authcBasic没有参数表示httpBasic认证 - //ssl:比如/admins/user/**=ssl没有参数,表示安全的url请求,协议为https - //user:比如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查 - Map definitionMap = DefinitionUrlConfig.definitionUrlOptions(); -// definitionMap.put(URL_SUFFIX+"/**", JWT_FILTER_NAME); - return definitionMap; - } - -/* *//** - * 开启注解 - *//* - @Bean - @DependsOn("lifecycleBeanPostProcessor") - public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { - DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); - // 强制使用cglib代理,防止和aop冲突 - defaultAdvisorAutoProxyCreator.setProxyTargetClass(true); - return defaultAdvisorAutoProxyCreator; - } - - @Bean - public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { - return new LifecycleBeanPostProcessor(); - }*/ - - /** - * 开启shiro aop注解支持. 使用代理方式; 所以需要开启代码支持; - * - * @param securityManager 安全管理器 - * @return 授权Advisor - */ - @Bean("authorizationAttributeSourceAdvisor") - public AuthorizationAttributeSourceAdvisor advisor(DefaultSecurityManager securityManager) { - AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); - advisor.setSecurityManager(securityManager); - return advisor; - } - - /** - * shiro缓存管理器; - * 需要注入对应的其它的实体类中: - * 1、安全管理器:securityManager - * 可见securityManager是整个shiro的核心; - * - * @return - */ - @Bean - public EhCacheManager ehCacheManager() { - EhCacheManager cacheManager = new EhCacheManager(); - cacheManager.setCacheManagerConfigFile("classpath:cache/ehcache.xml"); - return cacheManager; - } - -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java b/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java deleted file mode 100644 index f40d34ce..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.adc.da.main.config; - -import com.adc.da.login.security.JWTRealm; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authc.credential.HashedCredentialsMatcher; -import org.apache.shiro.cache.ehcache.EhCacheManager; -import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; -import org.apache.shiro.mgt.DefaultSubjectDAO; -import org.apache.shiro.mgt.SecurityManager; -import org.apache.shiro.spring.LifecycleBeanPostProcessor; -import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; -import org.apache.shiro.web.mgt.DefaultWebSecurityManager; -import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; -import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.DependsOn; -import org.springframework.core.io.ClassPathResource; - - -//@Configuration -public class ShiroConfiguration { - - @Bean(name = "ehCacheManagerFactoryBean") - public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() { - EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean(); - ClassPathResource classPathResource = new ClassPathResource("cache/ehcache-local.xml"); - ehCacheManagerFactoryBean.setConfigLocation(classPathResource); - return ehCacheManagerFactoryBean; - } - - @Bean(name = "shiroCacheManager") - @DependsOn({ "ehCacheManagerFactoryBean" }) - public EhCacheManager shiroCacheManager() { - EhCacheManager ehCacheManager = new EhCacheManager(); - ehCacheManager.setCacheManager(ehCacheManagerFactoryBean().getObject()); - return ehCacheManager; - } - - @Bean - @DependsOn({ "lifecycleBeanPostProcessor" }) - public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { - DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator(); - proxyCreator.setProxyTargetClass(true); - return proxyCreator; - } - - @Bean(name = "lifecycleBeanPostProcessor") - public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { - return new LifecycleBeanPostProcessor(); - } - - @Bean(name = "securityManager") - public SecurityManager securityManager() { - DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); - defaultWebSecurityManager.setRealm(jwtRealm()); - - // 关闭shiro自带的session - DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO(); - DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator(); - defaultSessionStorageEvaluator.setSessionStorageEnabled(false); - subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator); - defaultWebSecurityManager.setSubjectDAO(subjectDAO); - - // 自定义缓存管理器 - defaultWebSecurityManager.setCacheManager(shiroCacheManager()); - SecurityUtils.setSecurityManager(defaultWebSecurityManager); - return defaultWebSecurityManager; - } - - @Bean - public HashedCredentialsMatcher hashedCredentialsMatcher() { - HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); - hashedCredentialsMatcher.setHashAlgorithmName("md5");// 散列算法:这里使用MD5算法; - hashedCredentialsMatcher.setHashIterations(2);// 散列的次数,比如散列两次,相当于 - // md5(md5("")); - return hashedCredentialsMatcher; - } - - @Bean - public JWTRealm jwtRealm() { - JWTRealm jwtRealm = new JWTRealm(); - return jwtRealm; - } - - @Bean - public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() { - AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); - advisor.setSecurityManager(securityManager()); - return advisor; - } -} \ No newline at end of file diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java deleted file mode 100644 index acba54fe..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.adc.da.main.config; - - -import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.ParameterBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.schema.ModelRef; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Parameter; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.util.ArrayList; -import java.util.List; - -/** - * swagger UI 配置we年 - */ -@Configuration -@EnableSwagger2 -@EnableKnife4j -@Import(BeanValidatorPluginsConfiguration.class) -public class SwaggerConfig { - - - @Bean - public Docket createRestApiByDefault() { - - ParameterBuilder tokenPar = new ParameterBuilder(); - List pars = new ArrayList<>(); - tokenPar.name("Authorization") - .description("令牌") - .modelRef(new ModelRef("string")) - .parameterType("header") - .required(true) - .build(); - pars.add(tokenPar.build()); - - return new Docket(DocumentationType.SWAGGER_2) - .apiInfo(apiInfo()) - .select() - .apis(RequestHandlerSelectors.basePackage("com.adc.da")) - .paths(PathSelectors.any()) - .build() - .globalOperationParameters(pars).groupName("默认"); - } - - - - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - .title("FOTON-SLRS-SYSTEM-REST APIs") - .description("标准法规1.0") - .termsOfServiceUrl("http://localhost:8888/") - .contact("developer@mail.com") - .version("1.0.0") - .build(); - } - -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java deleted file mode 100644 index e1ed920f..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.adc.da.main.config; - -import com.adc.da.filter.*; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -/** - * Web配置,用于注入过滤器,拦截器等 - */ -@Configuration -@Order(value =3) -public class WebConfig { - - /** - * xss过滤器(高标准) - */ - @Bean - public FilterRegistrationBean xssFilter() { - FilterRegistrationBean registration = new FilterRegistrationBean(); -// registration.setFilter(new XssFilter()); - registration.setFilter(new WebFilter()); - registration.addUrlPatterns("/*"); - registration.setName("xssFilter"); - registration.setOrder(10); - return registration; - } - - /** - * xss过滤器(低标准) - */ -// @Bean -// public FilterRegistrationBean xssShieldFilter() { -// FilterRegistrationBean registration = new FilterRegistrationBean(); -// registration.setFilter(new XssShieldFilter()); -// registration.addUrlPatterns("/*"); -// registration.setName("xssShieldFilter"); -// registration.setOrder(10); -// return registration; -// } - - @Bean - public FilterRegistrationBean csrfFilter() { - FilterRegistrationBean registration = new FilterRegistrationBean(); - registration.setFilter(new CsrfFilter()); - registration.addUrlPatterns("/*"); - registration.setName("csrfFilter"); - registration.setOrder(9); - return registration; - } - - @Bean - public FilterRegistrationBean requestInfoFilter() { - FilterRegistrationBean registration = new FilterRegistrationBean(); - registration.setFilter(new RequestInfoFilter()); - registration.addUrlPatterns("/*"); - registration.setName("RequestInfoFilter"); - registration.setOrder(8); - return registration; - } - - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", buildConfig()); // 4 - return new CorsFilter(source); - } - - private CorsConfiguration buildConfig() { - CorsConfiguration corsConfiguration = new CorsConfiguration(); - corsConfiguration.addAllowedOrigin("*"); // 1允许任何域名使用 - corsConfiguration.addAllowedHeader("*"); // 2允许任何头 - corsConfiguration.addAllowedMethod("*"); // 3允许任何方法(post、get等) - return corsConfiguration; - } - - - @Bean - public FilterRegistrationBean httpCacheFilter() { - FilterRegistrationBean registration = new FilterRegistrationBean(); - registration.setFilter(new HttpCacheFilter()); - registration.addUrlPatterns("/*"); - registration.setName("httpCacheFilter"); - registration.addInitParameter("maxAge", String.valueOf(60 * 60 * 24 * 7)); - registration.setOrder(6); - return registration; - } - - /** - * 防伪造jsessionid - */ - @Bean - public FilterRegistrationBean fakeJSessionIdFilter() { - FilterRegistrationBean registration = new FilterRegistrationBean(); - registration.setFilter(new FakeJSessionIdFilter()); - registration.addUrlPatterns("/*"); - registration.setName("fakeJSessionIdFilter"); - registration.setOrder(5); - return registration; - } -} \ No newline at end of file diff --git a/adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java b/adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java deleted file mode 100644 index 76efcf6a..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.adc.da.main.filter; - -import cn.hutool.json.JSONUtil; -import com.adc.da.http.ResponseMessage; -import com.adc.da.http.Result; -import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; - -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class AuthFormAuthenticationFilter extends FormAuthenticationFilter { - - @Override - protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { - HttpServletResponse httpServletResponse = (HttpServletResponse) response; - httpServletResponse.setStatus(200); - httpServletResponse.setContentType("application/json;charset=utf-8"); - PrintWriter out = httpServletResponse.getWriter(); - ResponseMessage responseMessage = Result.error("A404", "无权访问"); - out.print(JSONUtil.toJsonStr(responseMessage)); - return false; - } -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java deleted file mode 100644 index 0f660d81..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.adc.da.main.generate; - -import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; -import com.baomidou.mybatisplus.core.toolkit.StringPool; -import com.baomidou.mybatisplus.generator.AutoGenerator; -import com.baomidou.mybatisplus.generator.InjectionConfig; -import com.baomidou.mybatisplus.generator.config.*; -import com.baomidou.mybatisplus.generator.config.po.TableInfo; -import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; -import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; -import org.apache.commons.lang3.StringUtils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -public class CodeGen { - - private static final String PACKAGE_PATH="/adc-da-slrs/src/main"; - - private static final String AUTHOR="super_liu"; - - // x.x.x.x:3306/xxxx --MYSQL - // 192.168.10.140:1521:foton_slrs_test - private static final String DB_IP="127.0.0.1:3306/foton_slrs_test"; - - private static final String DB_USER="root"; - - private static final String DB_PWD="Zxy20010202"; - - - /** - *

- * 读取控制台内容 - *

- */ - public static String scanner(String tip) { - Scanner scanner = new Scanner(System.in); - StringBuilder help = new StringBuilder(); - help.append("请输入" + tip + ":"); - System.out.println(help.toString()); - if (scanner.hasNext()) { - String ipt = scanner.next(); - if (StringUtils.isNotEmpty(ipt)) { - return ipt; - } - } - throw new MybatisPlusException("请输入正确的" + tip + "!"); - } - - public static void main(String[] args) { - // 代码生成器 - AutoGenerator mpg = new AutoGenerator(); - - // 全局配置 - GlobalConfig gc = new GlobalConfig(); - String projectPath = System.getProperty("user.dir"); - gc.setOutputDir(projectPath + PACKAGE_PATH+"/java"); - gc.setAuthor(AUTHOR); - gc.setOpen(false); - gc.setSwagger2(true); //实体属性 Swagger2 注解 - gc.setMapperName("%sDao"); - mpg.setGlobalConfig(gc); - - // 数据源配置 ORACLE -// DataSourceConfig dsc = new DataSourceConfig(); -// dsc.setUrl("jdbc:oracle:thin:@"+DB_IP); -// // dsc.setSchemaName("public"); -// dsc.setDriverName("oracle.jdbc.OracleDriver"); -// dsc.setUsername(DB_USER); -// dsc.setPassword(DB_PWD); -// mpg.setDataSource(dsc); - - // 数据源配置 MYSQL - DataSourceConfig dsc = new DataSourceConfig(); - dsc.setUrl("jdbc:mysql://"+DB_IP+"?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false"); - //dsc.setSchemaName("public");//PostgreSQL schemaName - dsc.setDriverName("com.mysql.cj.jdbc.Driver"); - dsc.setUsername(DB_USER); - dsc.setPassword(DB_PWD); - mpg.setDataSource(dsc); - - // 包配置 - PackageConfig pc = new PackageConfig(); - pc.setModuleName(scanner("模块名")); - pc.setMapper("dao"); - pc.setParent("com.adc.da.slrs"); - mpg.setPackageInfo(pc); - - // 自定义配置 - InjectionConfig cfg = new InjectionConfig() { - @Override - public void initMap() { - // to do nothing - } - }; - - // 如果模板引擎是 freemarker - String templatePath = "/templates/mapper.xml.ftl"; - // 如果模板引擎是 velocity - // String templatePath = "/templates/mapper.xml.vm"; - - // 自定义输出配置 - List focList = new ArrayList<>(); - // 自定义配置会被优先输出 - focList.add(new FileOutConfig(templatePath) { - @Override - public String outputFile(TableInfo tableInfo) { - // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! - return projectPath +PACKAGE_PATH+ "/resources/mybatis/mapper/" + pc.getModuleName() - + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; - } - }); - /* - cfg.setFileCreate(new IFileCreate() { - @Override - public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { - // 判断自定义文件夹是否需要创建 - checkDir("调用默认方法创建的目录"); - return false; - } - }); - */ - cfg.setFileOutConfigList(focList); - mpg.setCfg(cfg); - - // 配置模板 - TemplateConfig templateConfig = new TemplateConfig(); - - // 配置自定义输出模板 - //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 - templateConfig.setController("templates/controller.java"); - templateConfig.setMapper("templates/mapper.java"); - templateConfig.setEntity("templates/entity.java"); - templateConfig.setService("templates/service.java"); - templateConfig.setServiceImpl("templates/serviceImpl.java"); - templateConfig.setXml(null); - mpg.setTemplate(templateConfig); - - // 策略配置 - StrategyConfig strategy = new StrategyConfig(); - strategy.setNaming(NamingStrategy.underline_to_camel); - strategy.setColumnNaming(NamingStrategy.underline_to_camel); - strategy.setSuperEntityClass("com.adc.da.base.entity.BaseEntity"); - strategy.setEntityLombokModel(true); - strategy.setRestControllerStyle(true); - // 公共父类 - strategy.setSuperControllerClass("com.adc.da.base.web.BaseController"); - // 写于父类中的公共字段 - strategy.setSuperEntityColumns("id"); - strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); - strategy.setControllerMappingHyphenStyle(true); - strategy.setTablePrefix(pc.getModuleName() + "_"); - mpg.setStrategy(strategy); - mpg.setTemplateEngine(new FreemarkerTemplateEngine()); - mpg.execute(); - } -} diff --git a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java deleted file mode 100644 index cbd1d9cc..00000000 --- a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.adc.da.main.generate; - -//import com.codemagic.DbCodeGenerateFactory; - -public class CodeUtil { - - public CodeUtil() {} - - - public static void main(String[] args) { - String entityPackage="sys"; -// DbCodeGenerateFactory.codeGenerate("ECP_CHANGE_HIS_PLAN", entityPackage); - } - -} diff --git a/adc-da-main/src/main/resources/application-dev.properties b/adc-da-main/src/main/resources/application-dev.properties deleted file mode 100644 index 49fb12ec..00000000 --- a/adc-da-main/src/main/resources/application-dev.properties +++ /dev/null @@ -1,45 +0,0 @@ -# dev config -#============================================= -# 数据库配置 -#============================================= -spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver -spring.datasource.url = jdbc:mysql://101.36.227.22:33050/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false -#spring.datasource.url = jdbc:mysql://localhost:3306/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false -spring.datasource.username = root -#spring.datasource.password = 1q2w3e4r -spring.datasource.password=Zxy20010202 -#============================================== -# 应用设置 -spring.application.name=FotonLAWSSystem -application.code=20200101 -application.center=1 -#============================================== - -#============================================== -# 邮箱配置 -#============================================== -mail.state=false -spring.mail.host=outlook.geely.com -spring.mail.protocol=smtp -spring.mail.username=e-shiwei@geely.com -spring.mail.password=YtfaaJauPjq21 -spring.mail.properties.smtp.auth=true -spring.mail.properties.smtp.starttls.enable=false -spring.mail.properties.smtp.starttls.required=false -spring.mail.properties.mail.smtp.ssl.enable=false -spring.mail.port=587 - -# ============================================== -# rabbitMQ -# ============================================== -spring.rabbitmq.host=rabbitmq-cluster-01.vs.test.geely.svc -spring.rabbitmq.port=5672 -spring.rabbitmq.virtual-host=uat_pcms -spring.rabbitmq.username=uat_pcms -spring.rabbitmq.password=VxsBLL5bJruwzXfS -# spring.rabbitmq.publisher-confirms=true - -# ============================================== -# 文档存储路径指向 -# ============================================== -file.path=/usr/laws/file/ \ No newline at end of file diff --git a/adc-da-main/src/main/resources/application-prod.properties b/adc-da-main/src/main/resources/application-prod.properties deleted file mode 100644 index 203e71c7..00000000 --- a/adc-da-main/src/main/resources/application-prod.properties +++ /dev/null @@ -1,38 +0,0 @@ -#prod config -#============================================= -# 数据库配置 -#============================================= -spring.datasource.driverClassName = oracle.jdbc.OracleDriver -spring.datasource.url = jdbc:oracle:thin:@//10.190.228.33:1521/geely -spring.datasource.username = scyzx_uat -spring.datasource.password = b#Lf5z0^QrF4J3Km - - -#============================================== -# 邮箱配置 -#============================================== -mail.state=false -spring.mail.host=outlook.geely.com -spring.mail.protocol=smtp -spring.mail.username=e-shiwei@geely.com -spring.mail.password=YtfaaJauPjq21 -spring.mail.properties.smtp.auth=true -spring.mail.properties.smtp.starttls.enable=false -spring.mail.properties.smtp.starttls.required=false -spring.mail.properties.mail.smtp.ssl.enable=false -spring.mail.port=587 - -# ============================================== -# rabbitMQ -# ============================================== -spring.rabbitmq.host=rabbitmq-cluster-01.vs.test.geely.svc -spring.rabbitmq.port=5672 -spring.rabbitmq.virtual-host=uat_pcms -spring.rabbitmq.username=uat_pcms -spring.rabbitmq.password=VxsBLL5bJruwzXfS -# spring.rabbitmq.publisher-confirms=true - -# ============================================== -# 文档存储路径指向 -# ============================================== -file.path=/usr/laws/file/ \ No newline at end of file diff --git a/adc-da-main/src/main/resources/application-test.properties b/adc-da-main/src/main/resources/application-test.properties deleted file mode 100644 index 55f14c4b..00000000 --- a/adc-da-main/src/main/resources/application-test.properties +++ /dev/null @@ -1,38 +0,0 @@ -# test config -#============================================= -# 数据库配置 -#============================================= -spring.datasource.driverClassName = oracle.jdbc.OracleDriver -spring.datasource.url = jdbc:oracle:thin:@//10.190.228.33:1521/geely -spring.datasource.username = scyzx_uat -spring.datasource.password = b#Lf5z0^QrF4J3Km - - -#============================================== -# 邮箱配置 -#============================================== -mail.state=false -spring.mail.host=outlook.geely.com -spring.mail.protocol=smtp -spring.mail.username=e-shiwei@geely.com -spring.mail.password=YtfaaJauPjq21 -spring.mail.properties.smtp.auth=true -spring.mail.properties.smtp.starttls.enable=false -spring.mail.properties.smtp.starttls.required=false -spring.mail.properties.mail.smtp.ssl.enable=false -spring.mail.port=587 - -# ============================================== -# rabbitMQ -# ============================================== -spring.rabbitmq.host=rabbitmq-cluster-01.vs.test.geely.svc -spring.rabbitmq.port=5672 -spring.rabbitmq.virtual-host=uat_pcms -spring.rabbitmq.username=uat_pcms -spring.rabbitmq.password=VxsBLL5bJruwzXfS -# spring.rabbitmq.publisher-confirms=true - -# ============================================== -# 文档存储路径指向 -# ============================================== -file.path=/usr/laws/file/ \ No newline at end of file diff --git a/adc-da-main/src/main/resources/application.properties b/adc-da-main/src/main/resources/application.properties deleted file mode 100644 index 515259e4..00000000 --- a/adc-da-main/src/main/resources/application.properties +++ /dev/null @@ -1,146 +0,0 @@ -############################################## -# 项目启动模式 -############################################## -spring.profiles.active=dev - -############################################## -#公共配置信息 -############################################## -server.compression.enabled=true -server.compression.mime-types=application/json,application/xml,text/html,text/plain,text/css,application/x-javascript -# 端口号设置 -server.port=9999 -#主服务session超时 -server.servlet.session.timeout =600 - -# http-only -server.session.cookie.http-only=true -spring.mvc.async.request-timeout=20000 - -# file模块上传文件大小限制 -spring.http.multipart.max-request-size=100MB -spring.http.multipart.max-file-size=100MB - -#显示sql -logging.level.com.adc=DEBUG -logging.level.org.springframework=info - -# 请求前缀 -restPath=/api -#server.servlet.context-path=/api - -#是否将自己注册到Eureka Server上,默认为true -eureka.client.register-with-eureka=true -##是否从Eureka Server上获取注册信息,默认为true -eureka.client.fetch-registry=true - -#eureka.client.service-url.defaultZone=http://10.5.116.172:8672/eureka/ -#eureka.client.service-url.defaultZone=http://127.0.0.1:8671/eureka/ -#eureka.client.service-url.defaultZone=http://10.5.116.172:8672/eureka/ -eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/ -# 请求连接的超时时间 默认的时间为 1 秒 -ribbon.ConnectTimeout=500000 -# 请求处理的超时时间 -ribbon.ReadTimeout=500000 - -# =============================== -# = DATA SOURCE -# =============================== -spring.datasource.type = com.alibaba.druid.pool.DruidDataSource -# 下面为连接池的补充设置,应用到上面所有数据源中 -# 初始化大小,最小,最大 -spring.datasource.druid.initial-size= 5 -spring.datasource.druid.min-idle= 5 -spring.datasource.druid.max-active= 50 -# 配置获取连接等待超时的时间 -spring.datasource.druid.max-wait= 60000 -# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -spring.datasource.druid.time-between-eviction-runs-millis= 60000 -# 配置一个连接在池中最小生存的时间,单位是毫秒 -spring.datasource.druid.min-evictable-idle-time-millis= 300000 -spring.datasource.druid.validation-query= SELECT 1 FROM DUAL -# 空闲时间监测连接是否优秀奥 -spring.datasource.druid.test-while-idle= true -# 数据库连接心跳监测 -spring.datasource.druid.keep-alive= true -# 获取链接前检查链接是否有效 -spring.datasource.druid.test-on-borrow= true -# 返回连接池时检查链接是否可用 -spring.datasource.druid.test-on-return= false -# 打开PSCache,并且指定每个连接上PSCache的大小 -spring.datasource.druid.pool-prepared-statements= true -spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 20 -# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 -spring.datasource.druid.filters=stat,wall -#合并多个DruidDataSource的监控数据 -spring.datasource.druid.use-global-data-source-stat=true -# druid web管理页面开启 -spring.datasource.druid.stat-view-servlet.enabled=true -# druid web管理页面白名单 -#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 -# druid web管理页面账号 -spring.datasource.druid.stat-view-servlet.login-username=druid -# druid web管理页面密码 -spring.datasource.druid.stat-view-servlet.login-password=laws1q2w3e4r -# druid web管理页面URL访问前缀地址 -spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* -# =============================== - -# ======================================= -# Mybatis Plus config -# ======================================= -mybatis-plus.config-location=classpath:mybatis/mybatis-config.xml -mybatis-plus.mapper-locations=classpath*:mybatis/mapper/**/*.xml - -# ======================================== -# activiti 配置信息 -# ======================================== -#spring.activiti.database-schema=ACT -spring.activiti.database-schema-update=false -spring.activiti.check-process-definitions=false -spring.activiti.job-executor-activate=false -spring.activiti.process-definition-location-prefix=classpath:/mybatis/mapper/activiti/ - -# ============================================================================= -# 邮箱配置 -# ============================================================================= -mail.valid=false -spring.mail.host=smtp.163.com -spring.mail.protocol=smtp -spring.mail.username=xxx@163.com -spring.mail.password=xxx -spring.mail.properties.smtp.auth=true -spring.mail.properties.smtp.starttls.enable=true -spring.mail.properties.smtp.starttls.required=true -spring.mail.properties.mail.smtp.ssl.enable=true -spring.mail.port=465 -#全球标准法规管理系统 十六进制码 -mail.personName=E585A8E79083E6A087E58786E6B395E8A784E7AEA1E79086E7B3BBE7BB9F -#邮箱内容中嵌入的系统地址 -Lawss.address =http://standard.gacrnd.com:60090 - - -# ========================================= -# login value -# ========================================= -maxLoginErrorCount=3 -verifyCodeMode=1 - -# ============================================================================= -# 文件上传管控及配置 -# ============================================================================= -# file模块上传文件的服务器地址 -file.path=D:/uploadfile/bus -# 文件下载地址参数 -file.downloadUrl=http://39.98.140.126:10001/uploadPath -#上传文件白名单-以,分隔 -upload.file.white.lists = doc,docx,xls,xlsx,pdf,PDF,png,jpg - -# ============================================================================= -# elasticsearch 配置 -# ============================================================================= -elasticsearch.clustername=laws -elasticsearch.ip=localhost -elasticsearch.port=9300 -elasticsearch.poolSize=5 -elas.flag=true \ No newline at end of file diff --git a/adc-da-main/src/main/resources/banner.txt b/adc-da-main/src/main/resources/banner.txt deleted file mode 100644 index a4f9a525..00000000 --- a/adc-da-main/src/main/resources/banner.txt +++ /dev/null @@ -1,9 +0,0 @@ -${AnsiColor.RED} _ _ - __ _ __| | ___ __| | __ _ - / _` |/ _` |/ __|____ / _` |/ _` | - | (_| | (_| | (_|_____| (_| | (_| | - \__,_|\__,_|\___| \__,_|\__,_| - -${AnsiColor.YELLOW}------------------------------------------------ -${AnsiColor.YELLOW} :: ${AnsiColor.YELLOW}@数据资源中心 -${AnsiColor.YELLOW}------------------------------------------------${AnsiColor.WHITE} \ No newline at end of file diff --git a/adc-da-main/src/main/resources/cache/ehcache.xml b/adc-da-main/src/main/resources/cache/ehcache.xml deleted file mode 100644 index b580e227..00000000 --- a/adc-da-main/src/main/resources/cache/ehcache.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/adc-da-main/src/main/resources/logback-spring.xml b/adc-da-main/src/main/resources/logback-spring.xml deleted file mode 100644 index dec4b3f5..00000000 --- a/adc-da-main/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n - UTF-8 - - - - - - - - - - INFO - - ACCEPT - - ACCEPT - - - - - ${LOG_HOME}/${LOG_HOME_SYSTEM}/${PROJECT_NAME}.system_all.%d{yyyy-MM-dd}.%i.log - - 7 - - 100MB - - - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n - UTF-8 - - - - - - - - ERROR - ACCEPT - DENY - - - - ${LOG_HOME}/${LOG_HOME_SYSTEM}/${PROJECT_NAME}.system_error.%d{yyyy-MM-dd}.%i.log - - 30 - - 100MB - - - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n - UTF-8 - - - - - - - - INFO - ACCEPT - DENY - - - - ${LOG_HOME}/${LOG_HOME_DRUID}/${PROJECT_NAME}.druid_info.%d{yyyy-MM-dd}.%i.log - - 15 - - 50MB - - - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n - UTF-8 - - - - - - - WARN - - - - - ${LOG_HOME}/${LOG_HOME_DRUID}/${PROJECT_NAME}.druid_warn.%d{yyyy-MM-dd}.%i.log - - 30 - - 50MB - - - - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n - UTF-8 - - - - - - INFO - ACCEPT - DENY - - - - ${LOG_HOME}/${LOG_HOME_OPERATION}/${PROJECT_NAME}.operation.%d{yyyy-MM-dd}.%i.log - - 120 - - 300MB - - - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %logger{50} - %msg%n - UTF-8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/adc-da-main/src/main/resources/logo/logo_white.png b/adc-da-main/src/main/resources/logo/logo_white.png deleted file mode 100644 index e744da1be62a38f45e56e9b8d2e36f0341cbd2dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141020 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

q-W7Quesgj$$a9Bn5@>-bRW(RnQ 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 Tlt|nQczfielqD<0O#=Q0j)#Pn diff --git a/adc-da-main/src/main/resources/mybatis/mybatis-config.xml b/adc-da-main/src/main/resources/mybatis/mybatis-config.xml deleted file mode 100644 index e041bc2e..00000000 --- a/adc-da-main/src/main/resources/mybatis/mybatis-config.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/adc-da-main/src/main/resources/temp/entity.java.ftl b/adc-da-main/src/main/resources/temp/entity.java.ftl deleted file mode 100644 index c698d363..00000000 --- a/adc-da-main/src/main/resources/temp/entity.java.ftl +++ /dev/null @@ -1,152 +0,0 @@ -package ${package.Entity}; - -<#list table.importPackages as pkg> -import ${pkg}; - -<#if swagger2> -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -<#if entityLombokModel> -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - - -/** - *

- * ${table.comment!} - *

- * - * @author ${author} - * @since ${date} - */ -<#if entityLombokModel> -@Data - <#if superEntityClass??> -@EqualsAndHashCode(callSuper = true) - <#else> -@EqualsAndHashCode(callSuper = false) - -@Accessors(chain = true) - -<#if table.convert> -@TableName("${table.name}") - -<#if swagger2> -@ApiModel(value="${entity}对象", description="${table.comment!}") - -<#if superEntityClass??> -public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}> { -<#elseif activeRecord> -public class ${entity} extends Model<${entity}> { -<#else> -public class ${entity} implements Serializable { - - -<#if entitySerialVersionUID> - private static final long serialVersionUID = 1L; - -<#-- ---------- BEGIN 字段循环遍历 ----------> -<#list table.fields as field> - <#if field.keyFlag> - <#assign keyPropertyName="${field.propertyName}"/> - - - <#if field.comment!?length gt 0> - <#if swagger2> - @ApiModelProperty(value = "${field.comment}") - <#else> - /** - * ${field.comment} - */ - - - <#if field.keyFlag> - <#-- 主键 --> - <#if field.keyIdentityFlag> - @TableId(value = "${field.name}", type = IdType.AUTO) - <#elseif idType??> - @TableId(value = "${field.name}", type = IdType.${idType}) - <#elseif field.convert> - @TableId("${field.name}") - - <#-- 普通字段 --> - <#elseif field.fill??> - <#-- ----- 存在字段填充设置 -----> - <#if field.convert> - @TableField(value = "${field.name}", fill = FieldFill.${field.fill}) - <#else> - @TableField(fill = FieldFill.${field.fill}) - - <#elseif field.convert> - @TableField("${field.name}") - - <#-- 乐观锁注解 --> - <#if (versionFieldName!"") == field.name> - @Version - - <#-- 逻辑删除注解 --> - <#if (logicDeleteFieldName!"") == field.name> - @TableLogic - - private ${field.propertyType} ${field.propertyName}; - -<#------------ END 字段循环遍历 ----------> - -<#if !entityLombokModel> - <#list table.fields as field> - <#if field.propertyType == "boolean"> - <#assign getprefix="is"/> - <#else> - <#assign getprefix="get"/> - - public ${field.propertyType} ${getprefix}${field.capitalName}() { - return ${field.propertyName}; - } - - <#if entityBuilderModel> - public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { - <#else> - public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { - - this.${field.propertyName} = ${field.propertyName}; - <#if entityBuilderModel> - return this; - - } - - - -<#if entityColumnConstant> - <#list table.fields as field> - public static final String ${field.name?upper_case} = "${field.name}"; - - - -<#if activeRecord> - @Override - protected Serializable pkVal() { - <#if keyPropertyName??> - return this.${keyPropertyName}; - <#else> - return null; - - } - - -<#if !entityLombokModel> - @Override - public String toString() { - return "${entity}{" + - <#list table.fields as field> - <#if field_index==0> - "${field.propertyName}=" + ${field.propertyName} + - <#else> - ", ${field.propertyName}=" + ${field.propertyName} + - - - "}"; - } - -} diff --git a/adc-da-main/src/main/resources/temp/mapper.java.ftl b/adc-da-main/src/main/resources/temp/mapper.java.ftl deleted file mode 100644 index 53da4ae3..00000000 --- a/adc-da-main/src/main/resources/temp/mapper.java.ftl +++ /dev/null @@ -1,20 +0,0 @@ -package ${package.Mapper}; - -import ${package.Entity}.${entity}; -import ${superMapperClassPackage}; - -/** - *

- * ${table.comment!} Mapper 接口 - *

- * - * @author ${author} - * @since ${date} - */ -<#if kotlin> -interface ${table.mapperName} : ${superMapperClass}<${entity}> -<#else> -public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { - -} - diff --git a/adc-da-main/src/main/resources/temp/service.java.ftl b/adc-da-main/src/main/resources/temp/service.java.ftl deleted file mode 100644 index e3232f3a..00000000 --- a/adc-da-main/src/main/resources/temp/service.java.ftl +++ /dev/null @@ -1,20 +0,0 @@ -package ${package.Service}; - -import ${package.Entity}.${entity}; -import ${superServiceClassPackage}; - -/** - *

- * ${table.comment!} 服务类 - *

- * - * @author ${author} - * @since ${date} - */ -<#if kotlin> -interface ${table.serviceName} : ${superServiceClass}<${entity}> -<#else> -public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { - -} - diff --git a/adc-da-main/src/main/resources/templates/controller.java.ftl b/adc-da-main/src/main/resources/templates/controller.java.ftl deleted file mode 100644 index df485cbe..00000000 --- a/adc-da-main/src/main/resources/templates/controller.java.ftl +++ /dev/null @@ -1,41 +0,0 @@ -package ${package.Controller}; - - -import org.springframework.web.bind.annotation.RequestMapping; -import ${package.Entity}.${entity}; -import io.swagger.annotations.Api; -<#if restControllerStyle> -import org.springframework.web.bind.annotation.RestController; -<#else> -import org.springframework.stereotype.Controller; - -<#if superControllerClassPackage??> -import ${superControllerClassPackage}; - - -/** -*

- * ${table.comment!} 前端控制器 - *

-* -* @author ${author} -* @since ${date} -*/ -<#if restControllerStyle> -@RestController -<#else> -@Controller - -@Api(description = "|${entity}|") -@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}") -<#if kotlin> -class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}() -<#else> - <#if superControllerClass??> -public class ${table.controllerName} extends ${superControllerClass}<${entity}> { - <#else> -public class ${table.controllerName} extends ${superControllerClass}<${entity}>{ - - -} - diff --git a/adc-da-main/src/main/resources/templates/entity.java.ftl b/adc-da-main/src/main/resources/templates/entity.java.ftl deleted file mode 100644 index c698d363..00000000 --- a/adc-da-main/src/main/resources/templates/entity.java.ftl +++ /dev/null @@ -1,152 +0,0 @@ -package ${package.Entity}; - -<#list table.importPackages as pkg> -import ${pkg}; - -<#if swagger2> -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -<#if entityLombokModel> -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - - -/** - *

- * ${table.comment!} - *

- * - * @author ${author} - * @since ${date} - */ -<#if entityLombokModel> -@Data - <#if superEntityClass??> -@EqualsAndHashCode(callSuper = true) - <#else> -@EqualsAndHashCode(callSuper = false) - -@Accessors(chain = true) - -<#if table.convert> -@TableName("${table.name}") - -<#if swagger2> -@ApiModel(value="${entity}对象", description="${table.comment!}") - -<#if superEntityClass??> -public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}> { -<#elseif activeRecord> -public class ${entity} extends Model<${entity}> { -<#else> -public class ${entity} implements Serializable { - - -<#if entitySerialVersionUID> - private static final long serialVersionUID = 1L; - -<#-- ---------- BEGIN 字段循环遍历 ----------> -<#list table.fields as field> - <#if field.keyFlag> - <#assign keyPropertyName="${field.propertyName}"/> - - - <#if field.comment!?length gt 0> - <#if swagger2> - @ApiModelProperty(value = "${field.comment}") - <#else> - /** - * ${field.comment} - */ - - - <#if field.keyFlag> - <#-- 主键 --> - <#if field.keyIdentityFlag> - @TableId(value = "${field.name}", type = IdType.AUTO) - <#elseif idType??> - @TableId(value = "${field.name}", type = IdType.${idType}) - <#elseif field.convert> - @TableId("${field.name}") - - <#-- 普通字段 --> - <#elseif field.fill??> - <#-- ----- 存在字段填充设置 -----> - <#if field.convert> - @TableField(value = "${field.name}", fill = FieldFill.${field.fill}) - <#else> - @TableField(fill = FieldFill.${field.fill}) - - <#elseif field.convert> - @TableField("${field.name}") - - <#-- 乐观锁注解 --> - <#if (versionFieldName!"") == field.name> - @Version - - <#-- 逻辑删除注解 --> - <#if (logicDeleteFieldName!"") == field.name> - @TableLogic - - private ${field.propertyType} ${field.propertyName}; - -<#------------ END 字段循环遍历 ----------> - -<#if !entityLombokModel> - <#list table.fields as field> - <#if field.propertyType == "boolean"> - <#assign getprefix="is"/> - <#else> - <#assign getprefix="get"/> - - public ${field.propertyType} ${getprefix}${field.capitalName}() { - return ${field.propertyName}; - } - - <#if entityBuilderModel> - public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { - <#else> - public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { - - this.${field.propertyName} = ${field.propertyName}; - <#if entityBuilderModel> - return this; - - } - - - -<#if entityColumnConstant> - <#list table.fields as field> - public static final String ${field.name?upper_case} = "${field.name}"; - - - -<#if activeRecord> - @Override - protected Serializable pkVal() { - <#if keyPropertyName??> - return this.${keyPropertyName}; - <#else> - return null; - - } - - -<#if !entityLombokModel> - @Override - public String toString() { - return "${entity}{" + - <#list table.fields as field> - <#if field_index==0> - "${field.propertyName}=" + ${field.propertyName} + - <#else> - ", ${field.propertyName}=" + ${field.propertyName} + - - - "}"; - } - -} diff --git a/adc-da-main/src/main/resources/templates/mapper.java.ftl b/adc-da-main/src/main/resources/templates/mapper.java.ftl deleted file mode 100644 index 53da4ae3..00000000 --- a/adc-da-main/src/main/resources/templates/mapper.java.ftl +++ /dev/null @@ -1,20 +0,0 @@ -package ${package.Mapper}; - -import ${package.Entity}.${entity}; -import ${superMapperClassPackage}; - -/** - *

- * ${table.comment!} Mapper 接口 - *

- * - * @author ${author} - * @since ${date} - */ -<#if kotlin> -interface ${table.mapperName} : ${superMapperClass}<${entity}> -<#else> -public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { - -} - diff --git a/adc-da-main/src/main/resources/templates/mapper.xml.ftl b/adc-da-main/src/main/resources/templates/mapper.xml.ftl deleted file mode 100644 index d9ca71c4..00000000 --- a/adc-da-main/src/main/resources/templates/mapper.xml.ftl +++ /dev/null @@ -1,39 +0,0 @@ - - - - -<#if enableCache> - - - - -<#if baseResultMap> - - -<#list table.fields as field> -<#if field.keyFlag><#--生成主键排在第一位--> - - - -<#list table.commonFields as field><#--生成公共字段 --> - - -<#list table.fields as field> -<#if !field.keyFlag><#--生成普通字段 --> - - - - - - -<#if baseColumnList> - - -<#list table.commonFields as field> - ${field.name}, - - ${table.fieldNames} - - - - diff --git a/adc-da-main/src/main/resources/templates/service.java.ftl b/adc-da-main/src/main/resources/templates/service.java.ftl deleted file mode 100644 index e3232f3a..00000000 --- a/adc-da-main/src/main/resources/templates/service.java.ftl +++ /dev/null @@ -1,20 +0,0 @@ -package ${package.Service}; - -import ${package.Entity}.${entity}; -import ${superServiceClassPackage}; - -/** - *

- * ${table.comment!} 服务类 - *

- * - * @author ${author} - * @since ${date} - */ -<#if kotlin> -interface ${table.serviceName} : ${superServiceClass}<${entity}> -<#else> -public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { - -} - diff --git a/adc-da-main/src/main/resources/templates/serviceImpl.java.ftl b/adc-da-main/src/main/resources/templates/serviceImpl.java.ftl deleted file mode 100644 index aeebd14c..00000000 --- a/adc-da-main/src/main/resources/templates/serviceImpl.java.ftl +++ /dev/null @@ -1,26 +0,0 @@ -package ${package.ServiceImpl}; - -import ${package.Entity}.${entity}; -import ${package.Mapper}.${table.mapperName}; -import ${package.Service}.${table.serviceName}; -import ${superServiceImplClassPackage}; -import org.springframework.stereotype.Service; - -/** - *

- * ${table.comment!} 服务实现类 - *

- * - * @author ${author} - * @since ${date} - */ -@Service -<#if kotlin> -open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} { - -} -<#else> -public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { - -} - diff --git a/adc-da-main/src/main/resources/ueditor/config.json b/adc-da-main/src/main/resources/ueditor/config.json deleted file mode 100644 index 77a0a70f..00000000 --- a/adc-da-main/src/main/resources/ueditor/config.json +++ /dev/null @@ -1,97 +0,0 @@ -/* 前后端通信相关的配置,注释只允许使用多行方式 */ -{ - /* 上传图片配置项 */ - "imageActionName": "/api/ueditor/uploadImageData", /* 执行上传图片的action名称 */ - "imageFieldName": "upfile", /* 提交的图片表单名称 */ - "imageMaxSize": 2048000, /* 上传大小限制,单位B */ - "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */ - "imageCompressEnable": true, /* 是否压缩图片,默认是true */ - "imageCompressBorder": 1600, /* 图片压缩最长边限制 */ - "imageInsertAlign": "none", /* 插入的图片浮动方式 */ - "imageUrlPrefix": "", /* 图片访问路径前缀 */ - "localSavePathPrefix":"upload/images/inform", - "imagePathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ - /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ - /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ - /* {time} 会替换成时间戳 */ - /* {yyyy} 会替换成四位年份 */ - /* {yy} 会替换成两位年份 */ - /* {mm} 会替换成两位月份 */ - /* {dd} 会替换成两位日期 */ - /* {hh} 会替换成两位小时 */ - /* {ii} 会替换成两位分钟 */ - /* {ss} 会替换成两位秒 */ - /* 非法字符 \ : * ? " < > | */ - /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ - - /* 涂鸦图片上传配置项 */ - "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */ - "scrawlFieldName": "upfile", /* 提交的图片表单名称 */ - "scrawlPathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ - "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */ - "scrawlUrlPrefix": "", /* 图片访问路径前缀 */ - "scrawlInsertAlign": "none", - - /* 截图工具上传 */ - "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */ - "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ - "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */ - "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */ - - /* 抓取远程图片配置 */ - "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], - "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */ - "catcherFieldName": "source", /* 提交的图片列表表单名称 */ - "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ - "catcherUrlPrefix": "", /* 图片访问路径前缀 */ - "catcherMaxSize": 2048000, /* 上传大小限制,单位B */ - "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */ - /*抓取远程图片是否开启,默认true*/ - "catchRemoteImageEnable": false, - - /* 上传视频配置 */ - "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */ - "videoFieldName": "upfile", /* 提交的视频表单名称 */ - "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ - "videoUrlPrefix": "", /* 视频访问路径前缀 */ - "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */ - "videoAllowFiles": [ - ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", - ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */ - - /* 上传文件配置 */ - "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */ - "fileFieldName": "upfile", /* 提交的文件表单名称 */ - "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ - "fileUrlPrefix": "", /* 文件访问路径前缀 */ - "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */ - "fileAllowFiles": [ - ".png", ".jpg", ".jpeg", ".gif", ".bmp", - ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", - ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", - ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", - ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" - ], /* 上传文件格式显示 */ - - /* 列出指定目录下的图片 */ - "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */ - "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出图片的目录 */ - "imageManagerListSize": 20, /* 每次列出文件数量 */ - "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */ - "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */ - "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */ - - /* 列出指定目录下的文件 */ - "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */ - "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */ - "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */ - "fileManagerListSize": 20, /* 每次列出文件数量 */ - "fileManagerAllowFiles": [ - ".png", ".jpg", ".jpeg", ".gif", ".bmp", - ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", - ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", - ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", - ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" - ] /* 列出的文件类型 */ - -} \ No newline at end of file diff --git a/adc-da-main/src/main/resources/white/uploadWhite.txt b/adc-da-main/src/main/resources/white/uploadWhite.txt deleted file mode 100644 index fd4a3ae3..00000000 --- a/adc-da-main/src/main/resources/white/uploadWhite.txt +++ /dev/null @@ -1,12 +0,0 @@ -pdf -doc -docx -xlsx -xls -zip -rar -jpg -jpge -png -gif -ppt \ No newline at end of file diff --git a/adc-da-main/src/main/resources/white/xssWhite.txt b/adc-da-main/src/main/resources/white/xssWhite.txt deleted file mode 100644 index b724e4db..00000000 --- a/adc-da-main/src/main/resources/white/xssWhite.txt +++ /dev/null @@ -1 +0,0 @@ -/upload/ \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java index 8336f8a6..5bd7e17e 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java @@ -1,6 +1,8 @@ package com.adc.da.slrs.sarStandUnqualified.controller; +import com.adc.da.slrs.sarStandUnqualified.service.ISarStandUnqualifiedService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import com.adc.da.slrs.sarStandUnqualified.entity.SarStandUnqualified; import io.swagger.annotations.Api; @@ -16,8 +18,9 @@ import com.adc.da.base.web.BaseController; * @since 2021-06-15 */ @RestController -@Api(description = "|SarStandUnqualified|") +@Api(tags = "未符合项整改") @RequestMapping("/sarStandUnqualified/sar-stand-unqualified") public class SarStandUnqualifiedController extends BaseController { - + @Autowired + private ISarStandUnqualifiedService sarStandUnqualifiedService; } From 790ad9e5257976b61d1e011fddd2f2f07476a2d6 Mon Sep 17 00:00:00 2001 From: root <8964602+zxylbj@user.noreply.gitee.com> Date: Tue, 15 Jun 2021 17:13:39 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/adc/da/slrs/zxy/ZxyController.java | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java deleted file mode 100644 index d0a14bbb..00000000 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/zxy/ZxyController.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.adc.da.slrs.zxy; - -import io.swagger.annotations.Api; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@Api(tags = "赵肖云测试") -@RequestMapping("/zxy") -@RestController -public class ZxyController { - @GetMapping("/test") - public String a(){ - return "她和我有啥关系"; - } -} From a703e26ba4155c10ed59ee21c66abd171f3b7381 Mon Sep 17 00:00:00 2001 From: zj <1376702416@qq.com> Date: Tue, 15 Jun 2021 18:49:54 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=A0=87=E5=87=86=E9=A2=84=E8=AD=A6=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SarStandProjectLibraryController.java | 41 ++++++++++++ .../dao/SarStandProjectLibraryDao.java | 16 +++++ .../entity/SarStandProjectLibrary.java | 66 +++++++++++++++++++ .../SarStandProjectLibraryServiceImpl.java | 38 +++++++++++ .../controller/EarlyWarningEOController.java | 35 +++++++++- .../SarStandProjectLibraryMapper.xml | 5 ++ 6 files changed, 198 insertions(+), 3 deletions(-) create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/controller/SarStandProjectLibraryController.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/dao/SarStandProjectLibraryDao.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/entity/SarStandProjectLibrary.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/service/impl/SarStandProjectLibraryServiceImpl.java create mode 100644 adc-da-slrs/src/main/resources/mybatis/mapper/sarStandProjectLibrary/SarStandProjectLibraryMapper.xml diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/controller/SarStandProjectLibraryController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/controller/SarStandProjectLibraryController.java new file mode 100644 index 00000000..1535b10a --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/controller/SarStandProjectLibraryController.java @@ -0,0 +1,41 @@ +package com.adc.da.slrs.sarStandProjectLibrary.controller; + + +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.slrs.sarStandProjectLibrary.service.impl.SarStandProjectLibraryServiceImpl; +import com.adc.da.slrs.sarStandWarning.entity.EarlyWarningEO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import com.adc.da.slrs.sarStandProjectLibrary.entity.SarStandProjectLibrary; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import com.adc.da.base.web.BaseController; + +import javax.annotation.Resource; + +/** +*

+ * 前端控制器 + *

+* +* @author ZhangJin +* @since 2021-06-15 +*/ +@RestController +@Api(description = "|SarStandProjectLibrary|") +@RequestMapping("/sarStandProjectLibrary/sar-stand-project-library") +public class SarStandProjectLibraryController extends BaseController { + @Resource + private SarStandProjectLibraryServiceImpl sarStandProjectLibraryService; + @GetMapping("/queryMaintenanceProject") + @ApiOperation("项目查询") + public ResponseMessage queryMaintenanceProject(@RequestParam(defaultValue = "1", value = "newStandPage")int Page, @RequestParam(defaultValue = "10", value = "newStandPageSize") int PageSize) { + IPage list = sarStandProjectLibraryService.queryMaintenanceProject(Page,PageSize); + return Result.success("200",list); + } + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/dao/SarStandProjectLibraryDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/dao/SarStandProjectLibraryDao.java new file mode 100644 index 00000000..fae67684 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/dao/SarStandProjectLibraryDao.java @@ -0,0 +1,16 @@ +package com.adc.da.slrs.sarStandProjectLibrary.dao; + +import com.adc.da.slrs.sarStandProjectLibrary.entity.SarStandProjectLibrary; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author ZhangJin + * @since 2021-06-15 + */ +public interface SarStandProjectLibraryDao extends BaseMapper { + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/entity/SarStandProjectLibrary.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/entity/SarStandProjectLibrary.java new file mode 100644 index 00000000..e8843c2d --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/entity/SarStandProjectLibrary.java @@ -0,0 +1,66 @@ +package com.adc.da.slrs.sarStandProjectLibrary.entity; + +import com.adc.da.base.entity.BaseEntity; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author ZhangJin + * @since 2021-06-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@ApiModel(value="SarStandProjectLibrary对象", description="") +public class SarStandProjectLibrary extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableId("id") + @ApiModelProperty(value = "主键") + private String id; + + @ApiModelProperty(value = "产品平台") + private String projectPlatfor; + + @ApiModelProperty(value = "项目编号") + private String projectNumber; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目分类") + private String projectClassification; + + @ApiModelProperty(value = "项目状态") + private String projectStatus; + + @ApiModelProperty(value = "项目群") + private String projectGroup; + + @ApiModelProperty(value = "项目开始日期") + private Date projectStartDate; + + @ApiModelProperty(value = "项目完成日期") + private Date projectEndDate; + + @ApiModelProperty(value = "当前节点") + private String currentNode; + + @ApiModelProperty(value = "项目级别") + private String projectLevel; + + private String projectManager; + + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/service/impl/SarStandProjectLibraryServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/service/impl/SarStandProjectLibraryServiceImpl.java new file mode 100644 index 00000000..1fb25e63 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandProjectLibrary/service/impl/SarStandProjectLibraryServiceImpl.java @@ -0,0 +1,38 @@ +package com.adc.da.slrs.sarStandProjectLibrary.service.impl; + +import com.adc.da.slrs.sarStandProjectLibrary.entity.SarStandProjectLibrary; +import com.adc.da.slrs.sarStandProjectLibrary.dao.SarStandProjectLibraryDao; +import com.adc.da.slrs.sarStandProjectLibrary.service.ISarStandProjectLibraryService; +import com.adc.da.slrs.sarStandWarning.entity.EarlyWarningEO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author ZhangJin + * @since 2021-06-15 + */ +@Service +public class SarStandProjectLibraryServiceImpl extends ServiceImpl implements ISarStandProjectLibraryService { + @Resource + private SarStandProjectLibraryDao sarStandProjectLibraryDao; + @Override + public IPage queryMaintenanceProject(int current,int pageSize) { + QueryWrapper wrapper= new QueryWrapper<>(); + wrapper.inSql("id", "select project_id from sar_stand_project_relation"); + Page page = new Page<>(current, pageSize); + IPage userIPage = sarStandProjectLibraryDao.selectPage(page, wrapper); + System.out.println("总条数"+userIPage.getTotal()); + System.out.println("总页数"+userIPage.getPages()); + return userIPage; + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandWarning/controller/EarlyWarningEOController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandWarning/controller/EarlyWarningEOController.java index 950470bf..22b70ee3 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandWarning/controller/EarlyWarningEOController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandWarning/controller/EarlyWarningEOController.java @@ -27,7 +27,21 @@ import java.util.Map; public class EarlyWarningEOController extends BaseController { @Resource private EarlyWarningEOServiceImpl earlyWarningEOService; - +/** +* + * @param newStandPage + * @param newStandPageSize + * @param oldStandPage + * @param oldStandPageSize + * @param newItemsPage + * @param newItemsPageSize + * @param oldItemsPage + * @param oldItemsPageSize + * @param applyType +* @return +* @author zj +* date 2021-06-15 +**/ @GetMapping("/StandWarning") @ApiOperation("标准预警查询") public ResponseMessage newPageInfo(@RequestParam(defaultValue = "1", value = "newStandPage")int newStandPage, @RequestParam(defaultValue = "10", value = "newStandPageSize") int newStandPageSize, @@ -50,14 +64,29 @@ public class EarlyWarningEOController extends BaseController { listMap .add(map); return Result.success("200",listMap); } - + /** + * + * @param id + * @return + * @author zj + * date 2021-06-15 + **/ @GetMapping("/ChangePermissions") @ApiOperation("更改权限") public ResponseMessage ChangePermissions(String id) { String power = earlyWarningEOService.ChangePermissions(id); return Result.success("200",power); } - + /** + * + * @param newPolicyPage + * @param newPolicyPageSize + * @param oldPolicyPage + * @param oldPolicyPageSize + * @return + * @author zj + * date 2021-06-15 + **/ @GetMapping("/PolicyWarning") @ApiOperation("政策预警查询") public ResponseMessage newPolicyPageInfo(@RequestParam(defaultValue = "1", value = "newPolicyPage")int newPolicyPage, @RequestParam(defaultValue = "10", value = "newPolicyPageSize") int newPolicyPageSize, diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarStandProjectLibrary/SarStandProjectLibraryMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarStandProjectLibrary/SarStandProjectLibraryMapper.xml new file mode 100644 index 00000000..d5caed43 --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarStandProjectLibrary/SarStandProjectLibraryMapper.xml @@ -0,0 +1,5 @@ + + + + + From eb86294f15da16878309bea4f73471ce8dc20562 Mon Sep 17 00:00:00 2001 From: root <8964602+zxylbj@user.noreply.gitee.com> Date: Tue, 15 Jun 2021 19:53:52 +0800 Subject: [PATCH 6/6] =?UTF-8?q?update:=E6=81=A2=E5=A4=8Dmain=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - adc-da-main/.gitignore | 33 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 118 +++++++ adc-da-main/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + adc-da-main/mvnw | 310 ++++++++++++++++++ adc-da-main/mvnw.cmd | 182 ++++++++++ adc-da-main/pom.xml | 90 +++++ .../java/com/adc/da/AdcDaApplication.java | 22 ++ .../java/com/adc/da/ServletInitializer.java | 16 + .../main/advice/AdcDaBaseExceptionAdvice.java | 38 +++ .../da/main/advice/ShiroExceptionAdvice.java | 41 +++ .../da/main/config/DefinitionUrlConfig.java | 44 +++ .../adc/da/main/config/MybatisPlusConfig.java | 22 ++ .../da/main/config/RestTemplateConfig.java | 50 +++ .../com/adc/da/main/config/ShiroConfig.java | 151 +++++++++ .../da/main/config/ShiroConfiguration.java | 92 ++++++ .../com/adc/da/main/config/SwaggerConfig.java | 67 ++++ .../com/adc/da/main/config/WebConfig.java | 105 ++++++ .../filter/AuthFormAuthenticationFilter.java | 25 ++ .../com/adc/da/main/generate/CodeGen.java | 158 +++++++++ .../com/adc/da/main/generate/CodeUtil.java | 15 + .../main/resources/application-dev.properties | 44 +++ .../resources/application-prod.properties | 38 +++ .../resources/application-test.properties | 38 +++ .../src/main/resources/application.properties | 146 +++++++++ adc-da-main/src/main/resources/banner.txt | 9 + .../src/main/resources/cache/ehcache.xml | 66 ++++ .../src/main/resources/logback-spring.xml | 202 ++++++++++++ .../src/main/resources/logo/logo_white.png | Bin 0 -> 141020 bytes .../main/resources/mybatis/mybatis-config.xml | 14 + .../src/main/resources/temp/entity.java.ftl | 152 +++++++++ .../src/main/resources/temp/mapper.java.ftl | 20 ++ .../src/main/resources/temp/service.java.ftl | 20 ++ .../resources/templates/controller.java.ftl | 41 +++ .../main/resources/templates/entity.java.ftl | 152 +++++++++ .../main/resources/templates/mapper.java.ftl | 20 ++ .../main/resources/templates/mapper.xml.ftl | 39 +++ .../main/resources/templates/service.java.ftl | 20 ++ .../resources/templates/serviceImpl.java.ftl | 26 ++ .../src/main/resources/ueditor/config.json | 97 ++++++ .../src/main/resources/white/uploadWhite.txt | 12 + .../src/main/resources/white/xssWhite.txt | 1 + .../SarStandUnqualifiedController.java | 3 + 44 files changed, 2741 insertions(+), 1 deletion(-) create mode 100644 adc-da-main/.gitignore create mode 100644 adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 adc-da-main/.mvn/wrapper/maven-wrapper.jar create mode 100644 adc-da-main/.mvn/wrapper/maven-wrapper.properties create mode 100644 adc-da-main/mvnw create mode 100644 adc-da-main/mvnw.cmd create mode 100644 adc-da-main/pom.xml create mode 100644 adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java create mode 100644 adc-da-main/src/main/java/com/adc/da/ServletInitializer.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java create mode 100644 adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java create mode 100644 adc-da-main/src/main/resources/application-dev.properties create mode 100644 adc-da-main/src/main/resources/application-prod.properties create mode 100644 adc-da-main/src/main/resources/application-test.properties create mode 100644 adc-da-main/src/main/resources/application.properties create mode 100644 adc-da-main/src/main/resources/banner.txt create mode 100644 adc-da-main/src/main/resources/cache/ehcache.xml create mode 100644 adc-da-main/src/main/resources/logback-spring.xml create mode 100644 adc-da-main/src/main/resources/logo/logo_white.png create mode 100644 adc-da-main/src/main/resources/mybatis/mybatis-config.xml create mode 100644 adc-da-main/src/main/resources/temp/entity.java.ftl create mode 100644 adc-da-main/src/main/resources/temp/mapper.java.ftl create mode 100644 adc-da-main/src/main/resources/temp/service.java.ftl create mode 100644 adc-da-main/src/main/resources/templates/controller.java.ftl create mode 100644 adc-da-main/src/main/resources/templates/entity.java.ftl create mode 100644 adc-da-main/src/main/resources/templates/mapper.java.ftl create mode 100644 adc-da-main/src/main/resources/templates/mapper.xml.ftl create mode 100644 adc-da-main/src/main/resources/templates/service.java.ftl create mode 100644 adc-da-main/src/main/resources/templates/serviceImpl.java.ftl create mode 100644 adc-da-main/src/main/resources/ueditor/config.json create mode 100644 adc-da-main/src/main/resources/white/uploadWhite.txt create mode 100644 adc-da-main/src/main/resources/white/xssWhite.txt diff --git a/.gitignore b/.gitignore index f938eab5..14f81db9 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,3 @@ target *logs/ .metadata -adc-da-main/** \ No newline at end of file diff --git a/adc-da-main/.gitignore b/adc-da-main/.gitignore new file mode 100644 index 00000000..549e00a2 --- /dev/null +++ b/adc-da-main/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java b/adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 00000000..a45eb6ba --- /dev/null +++ b/adc-da-main/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,118 @@ +/* + * Copyright 2007-present the original author or authors. + * + * 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 + * + * https://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. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if (mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if (mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/adc-da-main/.mvn/wrapper/maven-wrapper.jar b/adc-da-main/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 GIT binary patch literal 50710 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 EfAhh=DF6Tf literal 0 HcmV?d00001 diff --git a/adc-da-main/.mvn/wrapper/maven-wrapper.properties b/adc-da-main/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000..642d572c --- /dev/null +++ b/adc-da-main/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/adc-da-main/mvnw b/adc-da-main/mvnw new file mode 100644 index 00000000..a16b5431 --- /dev/null +++ b/adc-da-main/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 +# +# https://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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/adc-da-main/mvnw.cmd b/adc-da-main/mvnw.cmd new file mode 100644 index 00000000..c8d43372 --- /dev/null +++ b/adc-da-main/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/adc-da-main/pom.xml b/adc-da-main/pom.xml new file mode 100644 index 00000000..bb363e53 --- /dev/null +++ b/adc-da-main/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + + com.adc + foton-slrs-system-rest + 3.0.0 + + com.adc + adc-da-main + adc-da-main + laws system rest main + + jar + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + com.adc + adc-da-slrs + 3.0.0 + + + com.adc + adc-da-activiti + 3.0.0 + + + com.adc + adc-da-sys + 3.0.0 + + + com.adc + adc-da-base + 3.0.0 + + + com.adc + adc-da-jwtLogin + 3.1.0 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + 2.2.0.RELEASE + + + + org.springframework.cloud + spring-cloud-starter-openfeign + 2.2.0.RELEASE + + + + + + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + + diff --git a/adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java b/adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java new file mode 100644 index 00000000..f2d62d02 --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/AdcDaApplication.java @@ -0,0 +1,22 @@ +package com.adc.da; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@EnableEurekaClient +@EnableFeignClients +@ServletComponentScan +@SpringBootApplication(exclude = SecurityAutoConfiguration.class) +@MapperScan(value = {"com.adc.da.file.store"}) +public class AdcDaApplication { + + public static void main(String[] args) { + SpringApplication.run(AdcDaApplication.class, args); + } + +} diff --git a/adc-da-main/src/main/java/com/adc/da/ServletInitializer.java b/adc-da-main/src/main/java/com/adc/da/ServletInitializer.java new file mode 100644 index 00000000..9413d00e --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/ServletInitializer.java @@ -0,0 +1,16 @@ +package com.adc.da; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Springboot打war包的启动口 + */ +public class ServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { + // 注意这里要指向原先用main方法执行的Application启动类 + return builder.sources(AdcDaApplication.class); + } +} \ No newline at end of file diff --git a/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java b/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java new file mode 100644 index 00000000..59b6ce91 --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/advice/AdcDaBaseExceptionAdvice.java @@ -0,0 +1,38 @@ +package com.adc.da.main.advice; + +import com.adc.da.exception.AdcDaBaseException; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.ResponseMessageCodeEnum; +import com.adc.da.http.Result; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +@Slf4j +@ControllerAdvice +@Order(value=4) +public class AdcDaBaseExceptionAdvice { + + + @ResponseStatus(HttpStatus.OK) + @ExceptionHandler(AdcDaBaseException.class) + @ResponseBody + public ResponseMessage handlerAdcDaBaseException(AdcDaBaseException exception) { + log.warn(exception.getMessage(), exception); + return Result.error(exception.getErrorCode(), exception.getMessage()); + } + + @ResponseStatus(HttpStatus.OK) + @ExceptionHandler(Exception.class) + @ResponseBody + public ResponseMessage handlerAdcDaBaseException(Exception exception) { + log.error(exception.getMessage(), exception); + // TODO 在数据库中记录程序异常,这个地方的异常是未处理的异常,需要管理员查看并进行处理以防重复出现 + return Result.error(ResponseMessageCodeEnum.ERROR.getCode(), "程序异常,请重试。如果重复出现请联系管理员处理!"); + } + +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java b/adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java new file mode 100644 index 00000000..65bed1de --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/advice/ShiroExceptionAdvice.java @@ -0,0 +1,41 @@ +package com.adc.da.main.advice; + +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authz.UnauthenticatedException; +import org.apache.shiro.authz.UnauthorizedException; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +@Slf4j +@ControllerAdvice +@Order(value=2) +public class ShiroExceptionAdvice { + + + @ResponseStatus(HttpStatus.UNAUTHORIZED) + @ExceptionHandler({AuthenticationException.class, UnknownAccountException.class, + UnauthenticatedException.class, IncorrectCredentialsException.class}) + @ResponseBody + public ResponseMessage unauthorized(Exception exception) { + log.warn(exception.getMessage(), exception); + log.info("catch UnknownAccountException"); + return Result.error("A404", "无权访问"); + } + + @ResponseStatus(HttpStatus.UNAUTHORIZED) + @ExceptionHandler(UnauthorizedException.class) + @ResponseBody + public ResponseMessage unauthorized1(UnauthorizedException exception) { + log.warn(exception.getMessage(), exception); + return Result.error("A404","无权访问"); + } +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java new file mode 100644 index 00000000..2f338bb1 --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/config/DefinitionUrlConfig.java @@ -0,0 +1,44 @@ +package com.adc.da.main.config; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * shiro 自定义URL规则设置 + */ +public class DefinitionUrlConfig { + + + + /** + * 匿名用户,无需登录 + */ + private static final String ANON = "anon"; + + + + // 拦截器 + //rest:比如/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。 + //port:比如/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。 + //perms:比如/admins/user/**=perms[user:add:*],perms参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,比如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。 + //roles:比如/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,比如/admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。//要实现or的效果看http://zgzty.blog.163.com/blog/static/83831226201302983358670/ + //anon:比如/admins/**=anon 没有参数,表示可以匿名使用。 + //authc:比如/admins/user/**=authc表示需要认证才能使用,没有参数 + //authcBasic:比如/admins/user/**=authcBasic没有参数表示httpBasic认证 + //ssl:比如/admins/user/**=ssl没有参数,表示安全的url请求,协议为https + //user:比如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查 + public static Map definitionUrlOptions(){ + Map filterRuleMap = new LinkedHashMap<>(); + //TODO 此处设置URL过滤规则 默认是全部请求进行拦截,此处设置为不拦截的URL地址 + filterRuleMap.put("/api/login",ANON);//登录接口 + // swagger接口文档 + filterRuleMap.put("/v2/api-docs", "anon"); + filterRuleMap.put("/webjars/**", "anon"); + filterRuleMap.put("/swagger-resources/**", "anon"); + filterRuleMap.put("/swagger-ui.html", "anon"); + filterRuleMap.put("/doc.html", "anon"); + return filterRuleMap; + } + + +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java new file mode 100644 index 00000000..0ca71a89 --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/config/MybatisPlusConfig.java @@ -0,0 +1,22 @@ +package com.adc.da.main.config; + +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * Mybatis Plus 配置 + */ +@EnableTransactionManagement +@Configuration +@MapperScan("com.adc.da.**.dao") +public class MybatisPlusConfig { + + @Bean + public PaginationInterceptor paginationInterceptor() { + return new PaginationInterceptor(); + } + +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java new file mode 100644 index 00000000..870c415d --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/config/RestTemplateConfig.java @@ -0,0 +1,50 @@ +package com.adc.da.main.config; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +import java.nio.charset.Charset; +import java.util.Iterator; +import java.util.List; + +/** + * restTemplate设置 + */ +@Configuration +public class RestTemplateConfig { + + private static final Logger logger = LoggerFactory.getLogger(RestTemplateConfig.class); + + @Bean + public RestTemplate restTemplate(ClientHttpRequestFactory factory){ + RestTemplate restTemplate = new RestTemplate(factory); + // 使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为"ISO-8859-1") + List> messageConverters = restTemplate.getMessageConverters(); + Iterator> iterator = messageConverters.iterator(); + while (iterator.hasNext()) { + HttpMessageConverter converter = iterator.next(); + if (converter instanceof StringHttpMessageConverter) { + iterator.remove(); + } + } + messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8"))); + + return restTemplate; + } + + @Bean + public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setReadTimeout(50000);//单位为ms + factory.setConnectTimeout(50000);//单位为ms + return factory; + } + +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java new file mode 100644 index 00000000..4bfc489b --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfig.java @@ -0,0 +1,151 @@ +package com.adc.da.main.config; + +import com.adc.da.login.security.JWTFilter; +import com.adc.da.login.security.JWTRealm; +import org.apache.shiro.cache.ehcache.EhCacheManager; +import org.apache.shiro.mgt.DefaultSecurityManager; +import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; +import org.apache.shiro.mgt.DefaultSubjectDAO; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.core.annotation.Order; +import org.springframework.core.io.ClassPathResource; + +import javax.servlet.Filter; +import java.util.HashMap; +import java.util.Map; + +@Configuration +@Order(value=1) +public class ShiroConfig { + + private static final String JWT_FILTER_NAME = "jwt"; + + private static final String URL_SUFFIX="/api"; + + /** + * 自定义realm,实现登录授权流程 + * @return + */ + @Bean(name="jwtRealm") + public JWTRealm jwtRealm() { + return new JWTRealm(); + } + + /** + * 配置securityManager 管理subject(默认),并把自定义realm交由manager + */ + @Bean + public DefaultSecurityManager securityManager() { + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + // 设置realm. + securityManager.setRealm(jwtRealm()); + //注入缓存管理器 + securityManager.setCacheManager(ehCacheManager()); + /* + * 关闭shiro自带的session,详情见文档 + * http://shiro.apache.org/session-management.html#SessionManagement-StatelessApplications%28Sessionless%29 + */ + DefaultSubjectDAO defaultSubjectDAO = new DefaultSubjectDAO(); + DefaultSessionStorageEvaluator storageEvaluator = new DefaultSessionStorageEvaluator(); + storageEvaluator.setSessionStorageEnabled(false); + defaultSubjectDAO.setSessionStorageEvaluator(storageEvaluator); + securityManager.setSubjectDAO(defaultSubjectDAO); + + return securityManager; + } + + /** + * 拦截链 + */ + @Bean + public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultSecurityManager securityManager) { + ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); + shiroFilterFactoryBean.setSecurityManager(securityManager); + shiroFilterFactoryBean.setFilters(filterMap()); + shiroFilterFactoryBean.setFilterChainDefinitionMap(definitionMap()); + + return shiroFilterFactoryBean; + } + + /** + * 自定义拦截器,处理所有请求 + */ + private Map filterMap() { + Map filterMap = new HashMap<>(); + filterMap.put(JWT_FILTER_NAME, new JWTFilter()); + return filterMap; + } + + /** + * url拦截规则 + */ + private Map definitionMap() { + // 拦截器 + //rest:比如/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。 + //port:比如/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。 + //perms:比如/admins/user/**=perms[user:add:*],perms参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,比如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。 + //roles:比如/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,比如/admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。//要实现or的效果看http://zgzty.blog.163.com/blog/static/83831226201302983358670/ + //anon:比如/admins/**=anon 没有参数,表示可以匿名使用。 + //authc:比如/admins/user/**=authc表示需要认证才能使用,没有参数 + //authcBasic:比如/admins/user/**=authcBasic没有参数表示httpBasic认证 + //ssl:比如/admins/user/**=ssl没有参数,表示安全的url请求,协议为https + //user:比如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查 + Map definitionMap = DefinitionUrlConfig.definitionUrlOptions(); +// definitionMap.put(URL_SUFFIX+"/**", JWT_FILTER_NAME); + return definitionMap; + } + +/* *//** + * 开启注解 + *//* + @Bean + @DependsOn("lifecycleBeanPostProcessor") + public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); + // 强制使用cglib代理,防止和aop冲突 + defaultAdvisorAutoProxyCreator.setProxyTargetClass(true); + return defaultAdvisorAutoProxyCreator; + } + + @Bean + public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + }*/ + + /** + * 开启shiro aop注解支持. 使用代理方式; 所以需要开启代码支持; + * + * @param securityManager 安全管理器 + * @return 授权Advisor + */ + @Bean("authorizationAttributeSourceAdvisor") + public AuthorizationAttributeSourceAdvisor advisor(DefaultSecurityManager securityManager) { + AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); + advisor.setSecurityManager(securityManager); + return advisor; + } + + /** + * shiro缓存管理器; + * 需要注入对应的其它的实体类中: + * 1、安全管理器:securityManager + * 可见securityManager是整个shiro的核心; + * + * @return + */ + @Bean + public EhCacheManager ehCacheManager() { + EhCacheManager cacheManager = new EhCacheManager(); + cacheManager.setCacheManagerConfigFile("classpath:cache/ehcache.xml"); + return cacheManager; + } + +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java b/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java new file mode 100644 index 00000000..f40d34ce --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/config/ShiroConfiguration.java @@ -0,0 +1,92 @@ +package com.adc.da.main.config; + +import com.adc.da.login.security.JWTRealm; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.credential.HashedCredentialsMatcher; +import org.apache.shiro.cache.ehcache.EhCacheManager; +import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; +import org.apache.shiro.mgt.DefaultSubjectDAO; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.core.io.ClassPathResource; + + +//@Configuration +public class ShiroConfiguration { + + @Bean(name = "ehCacheManagerFactoryBean") + public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() { + EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean(); + ClassPathResource classPathResource = new ClassPathResource("cache/ehcache-local.xml"); + ehCacheManagerFactoryBean.setConfigLocation(classPathResource); + return ehCacheManagerFactoryBean; + } + + @Bean(name = "shiroCacheManager") + @DependsOn({ "ehCacheManagerFactoryBean" }) + public EhCacheManager shiroCacheManager() { + EhCacheManager ehCacheManager = new EhCacheManager(); + ehCacheManager.setCacheManager(ehCacheManagerFactoryBean().getObject()); + return ehCacheManager; + } + + @Bean + @DependsOn({ "lifecycleBeanPostProcessor" }) + public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator(); + proxyCreator.setProxyTargetClass(true); + return proxyCreator; + } + + @Bean(name = "lifecycleBeanPostProcessor") + public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + } + + @Bean(name = "securityManager") + public SecurityManager securityManager() { + DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); + defaultWebSecurityManager.setRealm(jwtRealm()); + + // 关闭shiro自带的session + DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO(); + DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator(); + defaultSessionStorageEvaluator.setSessionStorageEnabled(false); + subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator); + defaultWebSecurityManager.setSubjectDAO(subjectDAO); + + // 自定义缓存管理器 + defaultWebSecurityManager.setCacheManager(shiroCacheManager()); + SecurityUtils.setSecurityManager(defaultWebSecurityManager); + return defaultWebSecurityManager; + } + + @Bean + public HashedCredentialsMatcher hashedCredentialsMatcher() { + HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); + hashedCredentialsMatcher.setHashAlgorithmName("md5");// 散列算法:这里使用MD5算法; + hashedCredentialsMatcher.setHashIterations(2);// 散列的次数,比如散列两次,相当于 + // md5(md5("")); + return hashedCredentialsMatcher; + } + + @Bean + public JWTRealm jwtRealm() { + JWTRealm jwtRealm = new JWTRealm(); + return jwtRealm; + } + + @Bean + public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() { + AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); + advisor.setSecurityManager(securityManager()); + return advisor; + } +} \ No newline at end of file diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java new file mode 100644 index 00000000..acba54fe --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/config/SwaggerConfig.java @@ -0,0 +1,67 @@ +package com.adc.da.main.config; + + +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +/** + * swagger UI 配置we年 + */ +@Configuration +@EnableSwagger2 +@EnableKnife4j +@Import(BeanValidatorPluginsConfiguration.class) +public class SwaggerConfig { + + + @Bean + public Docket createRestApiByDefault() { + + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList<>(); + tokenPar.name("Authorization") + .description("令牌") + .modelRef(new ModelRef("string")) + .parameterType("header") + .required(true) + .build(); + pars.add(tokenPar.build()); + + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("com.adc.da")) + .paths(PathSelectors.any()) + .build() + .globalOperationParameters(pars).groupName("默认"); + } + + + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("FOTON-SLRS-SYSTEM-REST APIs") + .description("标准法规1.0") + .termsOfServiceUrl("http://localhost:8888/") + .contact("developer@mail.com") + .version("1.0.0") + .build(); + } + +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java b/adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java new file mode 100644 index 00000000..e1ed920f --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/config/WebConfig.java @@ -0,0 +1,105 @@ +package com.adc.da.main.config; + +import com.adc.da.filter.*; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * Web配置,用于注入过滤器,拦截器等 + */ +@Configuration +@Order(value =3) +public class WebConfig { + + /** + * xss过滤器(高标准) + */ + @Bean + public FilterRegistrationBean xssFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); +// registration.setFilter(new XssFilter()); + registration.setFilter(new WebFilter()); + registration.addUrlPatterns("/*"); + registration.setName("xssFilter"); + registration.setOrder(10); + return registration; + } + + /** + * xss过滤器(低标准) + */ +// @Bean +// public FilterRegistrationBean xssShieldFilter() { +// FilterRegistrationBean registration = new FilterRegistrationBean(); +// registration.setFilter(new XssShieldFilter()); +// registration.addUrlPatterns("/*"); +// registration.setName("xssShieldFilter"); +// registration.setOrder(10); +// return registration; +// } + + @Bean + public FilterRegistrationBean csrfFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new CsrfFilter()); + registration.addUrlPatterns("/*"); + registration.setName("csrfFilter"); + registration.setOrder(9); + return registration; + } + + @Bean + public FilterRegistrationBean requestInfoFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new RequestInfoFilter()); + registration.addUrlPatterns("/*"); + registration.setName("RequestInfoFilter"); + registration.setOrder(8); + return registration; + } + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); // 4 + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.addAllowedOrigin("*"); // 1允许任何域名使用 + corsConfiguration.addAllowedHeader("*"); // 2允许任何头 + corsConfiguration.addAllowedMethod("*"); // 3允许任何方法(post、get等) + return corsConfiguration; + } + + + @Bean + public FilterRegistrationBean httpCacheFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new HttpCacheFilter()); + registration.addUrlPatterns("/*"); + registration.setName("httpCacheFilter"); + registration.addInitParameter("maxAge", String.valueOf(60 * 60 * 24 * 7)); + registration.setOrder(6); + return registration; + } + + /** + * 防伪造jsessionid + */ + @Bean + public FilterRegistrationBean fakeJSessionIdFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new FakeJSessionIdFilter()); + registration.addUrlPatterns("/*"); + registration.setName("fakeJSessionIdFilter"); + registration.setOrder(5); + return registration; + } +} \ No newline at end of file diff --git a/adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java b/adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java new file mode 100644 index 00000000..76efcf6a --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/filter/AuthFormAuthenticationFilter.java @@ -0,0 +1,25 @@ +package com.adc.da.main.filter; + +import cn.hutool.json.JSONUtil; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class AuthFormAuthenticationFilter extends FormAuthenticationFilter { + + @Override + protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + httpServletResponse.setStatus(200); + httpServletResponse.setContentType("application/json;charset=utf-8"); + PrintWriter out = httpServletResponse.getWriter(); + ResponseMessage responseMessage = Result.error("A404", "无权访问"); + out.print(JSONUtil.toJsonStr(responseMessage)); + return false; + } +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java new file mode 100644 index 00000000..ddf9a6f0 --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeGen.java @@ -0,0 +1,158 @@ +package com.adc.da.main.generate; + +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class CodeGen { + + private static final String PACKAGE_PATH="/adc-da-slrs/src/main"; + + private static final String AUTHOR="super_liu"; + + // x.x.x.x:3306/xxxx --MYSQL + // 192.168.10.140:1521:foton_slrs_test + private static final String DB_IP="127.0.0.1:3306/foton_slrs"; + + private static final String DB_USER="root"; + + private static final String DB_PWD="root"; + + + /** + *

+ * 读取控制台内容 + *

+ */ + public static String scanner(String tip) { + Scanner scanner = new Scanner(System.in); + StringBuilder help = new StringBuilder(); + help.append("请输入" + tip + ":"); + System.out.println(help.toString()); + if (scanner.hasNext()) { + String ipt = scanner.next(); + if (StringUtils.isNotEmpty(ipt)) { + return ipt; + } + } + throw new MybatisPlusException("请输入正确的" + tip + "!"); + } + + public static void main(String[] args) { + // 代码生成器 + AutoGenerator mpg = new AutoGenerator(); + + // 全局配置 + GlobalConfig gc = new GlobalConfig(); + String projectPath = System.getProperty("user.dir"); + gc.setOutputDir(projectPath + PACKAGE_PATH+"/java"); + gc.setAuthor(AUTHOR); + gc.setOpen(false); + gc.setSwagger2(true); //实体属性 Swagger2 注解 + gc.setMapperName("%sDao"); + mpg.setGlobalConfig(gc); + + // 数据源配置 ORACLE +// DataSourceConfig dsc = new DataSourceConfig(); +// dsc.setUrl("jdbc:oracle:thin:@"+DB_IP); +// // dsc.setSchemaName("public"); +// dsc.setDriverName("oracle.jdbc.OracleDriver"); +// dsc.setUsername(DB_USER); +// dsc.setPassword(DB_PWD); +// mpg.setDataSource(dsc); + + // 数据源配置 MYSQL + DataSourceConfig dsc = new DataSourceConfig(); + dsc.setUrl("jdbc:mysql://"+DB_IP+"?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false"); + //dsc.setSchemaName("public");//PostgreSQL schemaName + dsc.setDriverName("com.mysql.cj.jdbc.Driver"); + dsc.setUsername(DB_USER); + dsc.setPassword(DB_PWD); + mpg.setDataSource(dsc); + + // 包配置 + PackageConfig pc = new PackageConfig(); + pc.setModuleName(scanner("模块名")); + pc.setMapper("dao"); + pc.setParent("com.adc.da.slrs"); + mpg.setPackageInfo(pc); + + // 自定义配置 + InjectionConfig cfg = new InjectionConfig() { + @Override + public void initMap() { + // to do nothing + } + }; + + // 如果模板引擎是 freemarker + String templatePath = "/templates/mapper.xml.ftl"; + // 如果模板引擎是 velocity + // String templatePath = "/templates/mapper.xml.vm"; + + // 自定义输出配置 + List focList = new ArrayList<>(); + // 自定义配置会被优先输出 + focList.add(new FileOutConfig(templatePath) { + @Override + public String outputFile(TableInfo tableInfo) { + // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! + return projectPath +PACKAGE_PATH+ "/resources/mybatis/mapper/" + pc.getModuleName() + + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; + } + }); + /* + cfg.setFileCreate(new IFileCreate() { + @Override + public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { + // 判断自定义文件夹是否需要创建 + checkDir("调用默认方法创建的目录"); + return false; + } + }); + */ + cfg.setFileOutConfigList(focList); + mpg.setCfg(cfg); + + // 配置模板 + TemplateConfig templateConfig = new TemplateConfig(); + + // 配置自定义输出模板 + //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 + templateConfig.setController("templates/controller.java"); + templateConfig.setMapper("templates/mapper.java"); + templateConfig.setEntity("templates/entity.java"); + templateConfig.setService("templates/service.java"); + templateConfig.setServiceImpl("templates/serviceImpl.java"); + templateConfig.setXml(null); + mpg.setTemplate(templateConfig); + + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); + strategy.setSuperEntityClass("com.adc.da.base.entity.BaseEntity"); + strategy.setEntityLombokModel(true); + strategy.setRestControllerStyle(true); + // 公共父类 + strategy.setSuperControllerClass("com.adc.da.base.web.BaseController"); + // 写于父类中的公共字段 + strategy.setSuperEntityColumns("id"); + strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); + strategy.setControllerMappingHyphenStyle(true); + strategy.setTablePrefix(pc.getModuleName() + "_"); + mpg.setStrategy(strategy); + mpg.setTemplateEngine(new FreemarkerTemplateEngine()); + mpg.execute(); + } +} diff --git a/adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java new file mode 100644 index 00000000..cbd1d9cc --- /dev/null +++ b/adc-da-main/src/main/java/com/adc/da/main/generate/CodeUtil.java @@ -0,0 +1,15 @@ +package com.adc.da.main.generate; + +//import com.codemagic.DbCodeGenerateFactory; + +public class CodeUtil { + + public CodeUtil() {} + + + public static void main(String[] args) { + String entityPackage="sys"; +// DbCodeGenerateFactory.codeGenerate("ECP_CHANGE_HIS_PLAN", entityPackage); + } + +} diff --git a/adc-da-main/src/main/resources/application-dev.properties b/adc-da-main/src/main/resources/application-dev.properties new file mode 100644 index 00000000..1439004b --- /dev/null +++ b/adc-da-main/src/main/resources/application-dev.properties @@ -0,0 +1,44 @@ +# dev config +#============================================= +# 数据库配置 +#============================================= +spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver +spring.datasource.url = jdbc:mysql://101.36.227.22:33050/foton_slrs_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false +spring.datasource.username = root +spring.datasource.password = 1q2w3e4r + +#============================================== +# 应用设置 +spring.application.name=FotonLAWSSystem +application.code=20200101 +application.center=1 +#============================================== + +#============================================== +# 邮箱配置 +#============================================== +mail.state=false +spring.mail.host=outlook.geely.com +spring.mail.protocol=smtp +spring.mail.username=e-shiwei@geely.com +spring.mail.password=YtfaaJauPjq21 +spring.mail.properties.smtp.auth=true +spring.mail.properties.smtp.starttls.enable=false +spring.mail.properties.smtp.starttls.required=false +spring.mail.properties.mail.smtp.ssl.enable=false +spring.mail.port=587 + +# ============================================== +# rabbitMQ +# ============================================== +spring.rabbitmq.host=rabbitmq-cluster-01.vs.test.geely.svc +spring.rabbitmq.port=5672 +spring.rabbitmq.virtual-host=uat_pcms +spring.rabbitmq.username=uat_pcms +spring.rabbitmq.password=VxsBLL5bJruwzXfS +# spring.rabbitmq.publisher-confirms=true + +# ============================================== +# 文档存储路径指向 +# ============================================== +file.path=/usr/laws/file/ \ No newline at end of file diff --git a/adc-da-main/src/main/resources/application-prod.properties b/adc-da-main/src/main/resources/application-prod.properties new file mode 100644 index 00000000..203e71c7 --- /dev/null +++ b/adc-da-main/src/main/resources/application-prod.properties @@ -0,0 +1,38 @@ +#prod config +#============================================= +# 数据库配置 +#============================================= +spring.datasource.driverClassName = oracle.jdbc.OracleDriver +spring.datasource.url = jdbc:oracle:thin:@//10.190.228.33:1521/geely +spring.datasource.username = scyzx_uat +spring.datasource.password = b#Lf5z0^QrF4J3Km + + +#============================================== +# 邮箱配置 +#============================================== +mail.state=false +spring.mail.host=outlook.geely.com +spring.mail.protocol=smtp +spring.mail.username=e-shiwei@geely.com +spring.mail.password=YtfaaJauPjq21 +spring.mail.properties.smtp.auth=true +spring.mail.properties.smtp.starttls.enable=false +spring.mail.properties.smtp.starttls.required=false +spring.mail.properties.mail.smtp.ssl.enable=false +spring.mail.port=587 + +# ============================================== +# rabbitMQ +# ============================================== +spring.rabbitmq.host=rabbitmq-cluster-01.vs.test.geely.svc +spring.rabbitmq.port=5672 +spring.rabbitmq.virtual-host=uat_pcms +spring.rabbitmq.username=uat_pcms +spring.rabbitmq.password=VxsBLL5bJruwzXfS +# spring.rabbitmq.publisher-confirms=true + +# ============================================== +# 文档存储路径指向 +# ============================================== +file.path=/usr/laws/file/ \ No newline at end of file diff --git a/adc-da-main/src/main/resources/application-test.properties b/adc-da-main/src/main/resources/application-test.properties new file mode 100644 index 00000000..55f14c4b --- /dev/null +++ b/adc-da-main/src/main/resources/application-test.properties @@ -0,0 +1,38 @@ +# test config +#============================================= +# 数据库配置 +#============================================= +spring.datasource.driverClassName = oracle.jdbc.OracleDriver +spring.datasource.url = jdbc:oracle:thin:@//10.190.228.33:1521/geely +spring.datasource.username = scyzx_uat +spring.datasource.password = b#Lf5z0^QrF4J3Km + + +#============================================== +# 邮箱配置 +#============================================== +mail.state=false +spring.mail.host=outlook.geely.com +spring.mail.protocol=smtp +spring.mail.username=e-shiwei@geely.com +spring.mail.password=YtfaaJauPjq21 +spring.mail.properties.smtp.auth=true +spring.mail.properties.smtp.starttls.enable=false +spring.mail.properties.smtp.starttls.required=false +spring.mail.properties.mail.smtp.ssl.enable=false +spring.mail.port=587 + +# ============================================== +# rabbitMQ +# ============================================== +spring.rabbitmq.host=rabbitmq-cluster-01.vs.test.geely.svc +spring.rabbitmq.port=5672 +spring.rabbitmq.virtual-host=uat_pcms +spring.rabbitmq.username=uat_pcms +spring.rabbitmq.password=VxsBLL5bJruwzXfS +# spring.rabbitmq.publisher-confirms=true + +# ============================================== +# 文档存储路径指向 +# ============================================== +file.path=/usr/laws/file/ \ No newline at end of file diff --git a/adc-da-main/src/main/resources/application.properties b/adc-da-main/src/main/resources/application.properties new file mode 100644 index 00000000..515259e4 --- /dev/null +++ b/adc-da-main/src/main/resources/application.properties @@ -0,0 +1,146 @@ +############################################## +# 项目启动模式 +############################################## +spring.profiles.active=dev + +############################################## +#公共配置信息 +############################################## +server.compression.enabled=true +server.compression.mime-types=application/json,application/xml,text/html,text/plain,text/css,application/x-javascript +# 端口号设置 +server.port=9999 +#主服务session超时 +server.servlet.session.timeout =600 + +# http-only +server.session.cookie.http-only=true +spring.mvc.async.request-timeout=20000 + +# file模块上传文件大小限制 +spring.http.multipart.max-request-size=100MB +spring.http.multipart.max-file-size=100MB + +#显示sql +logging.level.com.adc=DEBUG +logging.level.org.springframework=info + +# 请求前缀 +restPath=/api +#server.servlet.context-path=/api + +#是否将自己注册到Eureka Server上,默认为true +eureka.client.register-with-eureka=true +##是否从Eureka Server上获取注册信息,默认为true +eureka.client.fetch-registry=true + +#eureka.client.service-url.defaultZone=http://10.5.116.172:8672/eureka/ +#eureka.client.service-url.defaultZone=http://127.0.0.1:8671/eureka/ +#eureka.client.service-url.defaultZone=http://10.5.116.172:8672/eureka/ +eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/ +# 请求连接的超时时间 默认的时间为 1 秒 +ribbon.ConnectTimeout=500000 +# 请求处理的超时时间 +ribbon.ReadTimeout=500000 + +# =============================== +# = DATA SOURCE +# =============================== +spring.datasource.type = com.alibaba.druid.pool.DruidDataSource +# 下面为连接池的补充设置,应用到上面所有数据源中 +# 初始化大小,最小,最大 +spring.datasource.druid.initial-size= 5 +spring.datasource.druid.min-idle= 5 +spring.datasource.druid.max-active= 50 +# 配置获取连接等待超时的时间 +spring.datasource.druid.max-wait= 60000 +# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 +spring.datasource.druid.time-between-eviction-runs-millis= 60000 +# 配置一个连接在池中最小生存的时间,单位是毫秒 +spring.datasource.druid.min-evictable-idle-time-millis= 300000 +spring.datasource.druid.validation-query= SELECT 1 FROM DUAL +# 空闲时间监测连接是否优秀奥 +spring.datasource.druid.test-while-idle= true +# 数据库连接心跳监测 +spring.datasource.druid.keep-alive= true +# 获取链接前检查链接是否有效 +spring.datasource.druid.test-on-borrow= true +# 返回连接池时检查链接是否可用 +spring.datasource.druid.test-on-return= false +# 打开PSCache,并且指定每个连接上PSCache的大小 +spring.datasource.druid.pool-prepared-statements= true +spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 20 +# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 +spring.datasource.druid.filters=stat,wall +#合并多个DruidDataSource的监控数据 +spring.datasource.druid.use-global-data-source-stat=true +# druid web管理页面开启 +spring.datasource.druid.stat-view-servlet.enabled=true +# druid web管理页面白名单 +#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 +# druid web管理页面账号 +spring.datasource.druid.stat-view-servlet.login-username=druid +# druid web管理页面密码 +spring.datasource.druid.stat-view-servlet.login-password=laws1q2w3e4r +# druid web管理页面URL访问前缀地址 +spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* +# =============================== + +# ======================================= +# Mybatis Plus config +# ======================================= +mybatis-plus.config-location=classpath:mybatis/mybatis-config.xml +mybatis-plus.mapper-locations=classpath*:mybatis/mapper/**/*.xml + +# ======================================== +# activiti 配置信息 +# ======================================== +#spring.activiti.database-schema=ACT +spring.activiti.database-schema-update=false +spring.activiti.check-process-definitions=false +spring.activiti.job-executor-activate=false +spring.activiti.process-definition-location-prefix=classpath:/mybatis/mapper/activiti/ + +# ============================================================================= +# 邮箱配置 +# ============================================================================= +mail.valid=false +spring.mail.host=smtp.163.com +spring.mail.protocol=smtp +spring.mail.username=xxx@163.com +spring.mail.password=xxx +spring.mail.properties.smtp.auth=true +spring.mail.properties.smtp.starttls.enable=true +spring.mail.properties.smtp.starttls.required=true +spring.mail.properties.mail.smtp.ssl.enable=true +spring.mail.port=465 +#全球标准法规管理系统 十六进制码 +mail.personName=E585A8E79083E6A087E58786E6B395E8A784E7AEA1E79086E7B3BBE7BB9F +#邮箱内容中嵌入的系统地址 +Lawss.address =http://standard.gacrnd.com:60090 + + +# ========================================= +# login value +# ========================================= +maxLoginErrorCount=3 +verifyCodeMode=1 + +# ============================================================================= +# 文件上传管控及配置 +# ============================================================================= +# file模块上传文件的服务器地址 +file.path=D:/uploadfile/bus +# 文件下载地址参数 +file.downloadUrl=http://39.98.140.126:10001/uploadPath +#上传文件白名单-以,分隔 +upload.file.white.lists = doc,docx,xls,xlsx,pdf,PDF,png,jpg + +# ============================================================================= +# elasticsearch 配置 +# ============================================================================= +elasticsearch.clustername=laws +elasticsearch.ip=localhost +elasticsearch.port=9300 +elasticsearch.poolSize=5 +elas.flag=true \ No newline at end of file diff --git a/adc-da-main/src/main/resources/banner.txt b/adc-da-main/src/main/resources/banner.txt new file mode 100644 index 00000000..a4f9a525 --- /dev/null +++ b/adc-da-main/src/main/resources/banner.txt @@ -0,0 +1,9 @@ +${AnsiColor.RED} _ _ + __ _ __| | ___ __| | __ _ + / _` |/ _` |/ __|____ / _` |/ _` | + | (_| | (_| | (_|_____| (_| | (_| | + \__,_|\__,_|\___| \__,_|\__,_| + +${AnsiColor.YELLOW}------------------------------------------------ +${AnsiColor.YELLOW} :: ${AnsiColor.YELLOW}@数据资源中心 +${AnsiColor.YELLOW}------------------------------------------------${AnsiColor.WHITE} \ No newline at end of file diff --git a/adc-da-main/src/main/resources/cache/ehcache.xml b/adc-da-main/src/main/resources/cache/ehcache.xml new file mode 100644 index 00000000..b580e227 --- /dev/null +++ b/adc-da-main/src/main/resources/cache/ehcache.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + diff --git a/adc-da-main/src/main/resources/logback-spring.xml b/adc-da-main/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..dec4b3f5 --- /dev/null +++ b/adc-da-main/src/main/resources/logback-spring.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n + UTF-8 + + + + + + + + + + INFO + + ACCEPT + + ACCEPT + + + + + ${LOG_HOME}/${LOG_HOME_SYSTEM}/${PROJECT_NAME}.system_all.%d{yyyy-MM-dd}.%i.log + + 7 + + 100MB + + + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n + UTF-8 + + + + + + + + ERROR + ACCEPT + DENY + + + + ${LOG_HOME}/${LOG_HOME_SYSTEM}/${PROJECT_NAME}.system_error.%d{yyyy-MM-dd}.%i.log + + 30 + + 100MB + + + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n + UTF-8 + + + + + + + + INFO + ACCEPT + DENY + + + + ${LOG_HOME}/${LOG_HOME_DRUID}/${PROJECT_NAME}.druid_info.%d{yyyy-MM-dd}.%i.log + + 15 + + 50MB + + + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n + UTF-8 + + + + + + + WARN + + + + + ${LOG_HOME}/${LOG_HOME_DRUID}/${PROJECT_NAME}.druid_warn.%d{yyyy-MM-dd}.%i.log + + 30 + + 50MB + + + + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n + UTF-8 + + + + + + INFO + ACCEPT + DENY + + + + ${LOG_HOME}/${LOG_HOME_OPERATION}/${PROJECT_NAME}.operation.%d{yyyy-MM-dd}.%i.log + + 120 + + 300MB + + + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %logger{50} - %msg%n + UTF-8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/adc-da-main/src/main/resources/logo/logo_white.png b/adc-da-main/src/main/resources/logo/logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..e744da1be62a38f45e56e9b8d2e36f0341cbd2dd GIT binary patch literal 141020 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
xCHF+^=H>YpSukbPJ)-5*esz$p(3XDXrye}{TN z&Qaw=AaWD5Z5%k_JokK^z`?J+o){2R7~bJUG*JILMtJ{{-MdK|{V8M4qw!IAGyZG-m}Ck6MxFqH zA;yMrZDND&8tqvwF4f!lY?-^nMCGIZjjiaN3F1ro^*_T-HA4atakf>xskKeLzxr~) zT2hmNS{<&4sJT~qw{?14tE`A3sZ^x46-hE}Xtc26L&7^MsB@fkl~)dcj_jF4ZUh*wI2a?NkDj!Do&4x@TO;l2!aBMf603|3=HfNgx)m%o*6ki7kHb zy>G*(pQ!_v7`46)N9o&u4)Th}PbVV4x5~D`j&KHfrvk;;ffZN=vR{Wrq4(#frP~q>E%#QlstO_K?|Xa;#^#^Ylq}_D*SA;kM(e4=Z9Hl#6vUqs>1QAdg&jz<^F+1_kv<%&(PcWWYq`x5&3!Z@4ZaMEq(+ zYI$V|uRW{7g6W8fG@1_(;zD9lRN^2ImxK_{FpKd<`!Wm@BB2TL@-?SboN9hGDab$o zSBBmrsJr1kGYM1{!?M_B^8JAvXNDfRo=_??)|mw;-@>$ww#6N)r{1}a8%f@B{NlxCjR{8ho_EVe75W?K~j30B}(VRGwrp-7T9y6+Yh^^Oh`I z8J0`r+X+8m5Ne-==h(C1(bk%g>8IkegN8N@kcyErtRsJeLI`01Pjie;FSlFHS!Aby zTj0-Hdc%})uT{Of`Mhkzezd!gwyI{4GVNiA6e_Huih_n?^QXd6&aZ;CeASK#!@Bi= zEB4R8Jm?tuLC9l3;zyuy*>uaY@ zk)#5rgE9?GF@{C`9gJ)adI+Ei(wLCBM`@M$RQaHZ&?JKN?;2ap>0lKnwDXJq0ctL_t5T!fBY5B`$|+;7xdp^bvLyub-6fce%{$y=nGJw z2!7M&N&j8f=hAKlsX*i(ym3f|fG_Aj6>n}57NdrYjU(Yw(?6Ytjr9l0sD9KH`rPdk znp8{atD0DrJ_3}4oRG<~MtYWa#8u2xFZ00-WiEQmMRq?vC+V_sOM_FJXv0T&rh`|? zGe85r&){z*T}WI>a~?@r_mG>7i=1g}2hrH}CjJZFmsf zY6v3z##gj8*B|{=%w5mnt3m^hhM#wsyP2)l-OO6)YvN_Q*y~ROCJK8Hz3E@rmYiWT zZm(&f2(T3nCZg0*5H1RlG)1*I$m*LUnO>(L3>c)bB3Wo3fUq-N%p}x96VEf&amf9g zl$0mjXWh)mb;Isrk(^v<%z&O4kPOi#4+Y}nX_Ux&anIpq|3EdvC4p{`>hWH;KbA-+ zPy4ZdC<~Q?WC+NLN*RQdhwqdSKXuH0xqL@)ISw%R+BN`_cxua9eu;;E%8qdd1>&7Y z;2jFNb?jFC*EEM=ph4I_8k=r*Fjs!ggjo34m>4*449jTgygD`bZ;grRV4p7X&6B8BQwn<^Cp!<2q}LIPQFPk

q-W7Quesgj$$a9Bn5@>-bRW(RnQ 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 Tlt|nQczfielqD<0O#=Q0j)#Pn literal 0 HcmV?d00001 diff --git a/adc-da-main/src/main/resources/mybatis/mybatis-config.xml b/adc-da-main/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 00000000..e041bc2e --- /dev/null +++ b/adc-da-main/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/adc-da-main/src/main/resources/temp/entity.java.ftl b/adc-da-main/src/main/resources/temp/entity.java.ftl new file mode 100644 index 00000000..c698d363 --- /dev/null +++ b/adc-da-main/src/main/resources/temp/entity.java.ftl @@ -0,0 +1,152 @@ +package ${package.Entity}; + +<#list table.importPackages as pkg> +import ${pkg}; + +<#if swagger2> +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +<#if entityLombokModel> +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + + +/** + *

+ * ${table.comment!} + *

+ * + * @author ${author} + * @since ${date} + */ +<#if entityLombokModel> +@Data + <#if superEntityClass??> +@EqualsAndHashCode(callSuper = true) + <#else> +@EqualsAndHashCode(callSuper = false) + +@Accessors(chain = true) + +<#if table.convert> +@TableName("${table.name}") + +<#if swagger2> +@ApiModel(value="${entity}对象", description="${table.comment!}") + +<#if superEntityClass??> +public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}> { +<#elseif activeRecord> +public class ${entity} extends Model<${entity}> { +<#else> +public class ${entity} implements Serializable { + + +<#if entitySerialVersionUID> + private static final long serialVersionUID = 1L; + +<#-- ---------- BEGIN 字段循环遍历 ----------> +<#list table.fields as field> + <#if field.keyFlag> + <#assign keyPropertyName="${field.propertyName}"/> + + + <#if field.comment!?length gt 0> + <#if swagger2> + @ApiModelProperty(value = "${field.comment}") + <#else> + /** + * ${field.comment} + */ + + + <#if field.keyFlag> + <#-- 主键 --> + <#if field.keyIdentityFlag> + @TableId(value = "${field.name}", type = IdType.AUTO) + <#elseif idType??> + @TableId(value = "${field.name}", type = IdType.${idType}) + <#elseif field.convert> + @TableId("${field.name}") + + <#-- 普通字段 --> + <#elseif field.fill??> + <#-- ----- 存在字段填充设置 -----> + <#if field.convert> + @TableField(value = "${field.name}", fill = FieldFill.${field.fill}) + <#else> + @TableField(fill = FieldFill.${field.fill}) + + <#elseif field.convert> + @TableField("${field.name}") + + <#-- 乐观锁注解 --> + <#if (versionFieldName!"") == field.name> + @Version + + <#-- 逻辑删除注解 --> + <#if (logicDeleteFieldName!"") == field.name> + @TableLogic + + private ${field.propertyType} ${field.propertyName}; + +<#------------ END 字段循环遍历 ----------> + +<#if !entityLombokModel> + <#list table.fields as field> + <#if field.propertyType == "boolean"> + <#assign getprefix="is"/> + <#else> + <#assign getprefix="get"/> + + public ${field.propertyType} ${getprefix}${field.capitalName}() { + return ${field.propertyName}; + } + + <#if entityBuilderModel> + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <#else> + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + + this.${field.propertyName} = ${field.propertyName}; + <#if entityBuilderModel> + return this; + + } + + + +<#if entityColumnConstant> + <#list table.fields as field> + public static final String ${field.name?upper_case} = "${field.name}"; + + + +<#if activeRecord> + @Override + protected Serializable pkVal() { + <#if keyPropertyName??> + return this.${keyPropertyName}; + <#else> + return null; + + } + + +<#if !entityLombokModel> + @Override + public String toString() { + return "${entity}{" + + <#list table.fields as field> + <#if field_index==0> + "${field.propertyName}=" + ${field.propertyName} + + <#else> + ", ${field.propertyName}=" + ${field.propertyName} + + + + "}"; + } + +} diff --git a/adc-da-main/src/main/resources/temp/mapper.java.ftl b/adc-da-main/src/main/resources/temp/mapper.java.ftl new file mode 100644 index 00000000..53da4ae3 --- /dev/null +++ b/adc-da-main/src/main/resources/temp/mapper.java.ftl @@ -0,0 +1,20 @@ +package ${package.Mapper}; + +import ${package.Entity}.${entity}; +import ${superMapperClassPackage}; + +/** + *

+ * ${table.comment!} Mapper 接口 + *

+ * + * @author ${author} + * @since ${date} + */ +<#if kotlin> +interface ${table.mapperName} : ${superMapperClass}<${entity}> +<#else> +public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { + +} + diff --git a/adc-da-main/src/main/resources/temp/service.java.ftl b/adc-da-main/src/main/resources/temp/service.java.ftl new file mode 100644 index 00000000..e3232f3a --- /dev/null +++ b/adc-da-main/src/main/resources/temp/service.java.ftl @@ -0,0 +1,20 @@ +package ${package.Service}; + +import ${package.Entity}.${entity}; +import ${superServiceClassPackage}; + +/** + *

+ * ${table.comment!} 服务类 + *

+ * + * @author ${author} + * @since ${date} + */ +<#if kotlin> +interface ${table.serviceName} : ${superServiceClass}<${entity}> +<#else> +public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { + +} + diff --git a/adc-da-main/src/main/resources/templates/controller.java.ftl b/adc-da-main/src/main/resources/templates/controller.java.ftl new file mode 100644 index 00000000..df485cbe --- /dev/null +++ b/adc-da-main/src/main/resources/templates/controller.java.ftl @@ -0,0 +1,41 @@ +package ${package.Controller}; + + +import org.springframework.web.bind.annotation.RequestMapping; +import ${package.Entity}.${entity}; +import io.swagger.annotations.Api; +<#if restControllerStyle> +import org.springframework.web.bind.annotation.RestController; +<#else> +import org.springframework.stereotype.Controller; + +<#if superControllerClassPackage??> +import ${superControllerClassPackage}; + + +/** +*

+ * ${table.comment!} 前端控制器 + *

+* +* @author ${author} +* @since ${date} +*/ +<#if restControllerStyle> +@RestController +<#else> +@Controller + +@Api(description = "|${entity}|") +@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}") +<#if kotlin> +class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}() +<#else> + <#if superControllerClass??> +public class ${table.controllerName} extends ${superControllerClass}<${entity}> { + <#else> +public class ${table.controllerName} extends ${superControllerClass}<${entity}>{ + + +} + diff --git a/adc-da-main/src/main/resources/templates/entity.java.ftl b/adc-da-main/src/main/resources/templates/entity.java.ftl new file mode 100644 index 00000000..c698d363 --- /dev/null +++ b/adc-da-main/src/main/resources/templates/entity.java.ftl @@ -0,0 +1,152 @@ +package ${package.Entity}; + +<#list table.importPackages as pkg> +import ${pkg}; + +<#if swagger2> +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +<#if entityLombokModel> +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + + +/** + *

+ * ${table.comment!} + *

+ * + * @author ${author} + * @since ${date} + */ +<#if entityLombokModel> +@Data + <#if superEntityClass??> +@EqualsAndHashCode(callSuper = true) + <#else> +@EqualsAndHashCode(callSuper = false) + +@Accessors(chain = true) + +<#if table.convert> +@TableName("${table.name}") + +<#if swagger2> +@ApiModel(value="${entity}对象", description="${table.comment!}") + +<#if superEntityClass??> +public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}> { +<#elseif activeRecord> +public class ${entity} extends Model<${entity}> { +<#else> +public class ${entity} implements Serializable { + + +<#if entitySerialVersionUID> + private static final long serialVersionUID = 1L; + +<#-- ---------- BEGIN 字段循环遍历 ----------> +<#list table.fields as field> + <#if field.keyFlag> + <#assign keyPropertyName="${field.propertyName}"/> + + + <#if field.comment!?length gt 0> + <#if swagger2> + @ApiModelProperty(value = "${field.comment}") + <#else> + /** + * ${field.comment} + */ + + + <#if field.keyFlag> + <#-- 主键 --> + <#if field.keyIdentityFlag> + @TableId(value = "${field.name}", type = IdType.AUTO) + <#elseif idType??> + @TableId(value = "${field.name}", type = IdType.${idType}) + <#elseif field.convert> + @TableId("${field.name}") + + <#-- 普通字段 --> + <#elseif field.fill??> + <#-- ----- 存在字段填充设置 -----> + <#if field.convert> + @TableField(value = "${field.name}", fill = FieldFill.${field.fill}) + <#else> + @TableField(fill = FieldFill.${field.fill}) + + <#elseif field.convert> + @TableField("${field.name}") + + <#-- 乐观锁注解 --> + <#if (versionFieldName!"") == field.name> + @Version + + <#-- 逻辑删除注解 --> + <#if (logicDeleteFieldName!"") == field.name> + @TableLogic + + private ${field.propertyType} ${field.propertyName}; + +<#------------ END 字段循环遍历 ----------> + +<#if !entityLombokModel> + <#list table.fields as field> + <#if field.propertyType == "boolean"> + <#assign getprefix="is"/> + <#else> + <#assign getprefix="get"/> + + public ${field.propertyType} ${getprefix}${field.capitalName}() { + return ${field.propertyName}; + } + + <#if entityBuilderModel> + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <#else> + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + + this.${field.propertyName} = ${field.propertyName}; + <#if entityBuilderModel> + return this; + + } + + + +<#if entityColumnConstant> + <#list table.fields as field> + public static final String ${field.name?upper_case} = "${field.name}"; + + + +<#if activeRecord> + @Override + protected Serializable pkVal() { + <#if keyPropertyName??> + return this.${keyPropertyName}; + <#else> + return null; + + } + + +<#if !entityLombokModel> + @Override + public String toString() { + return "${entity}{" + + <#list table.fields as field> + <#if field_index==0> + "${field.propertyName}=" + ${field.propertyName} + + <#else> + ", ${field.propertyName}=" + ${field.propertyName} + + + + "}"; + } + +} diff --git a/adc-da-main/src/main/resources/templates/mapper.java.ftl b/adc-da-main/src/main/resources/templates/mapper.java.ftl new file mode 100644 index 00000000..53da4ae3 --- /dev/null +++ b/adc-da-main/src/main/resources/templates/mapper.java.ftl @@ -0,0 +1,20 @@ +package ${package.Mapper}; + +import ${package.Entity}.${entity}; +import ${superMapperClassPackage}; + +/** + *

+ * ${table.comment!} Mapper 接口 + *

+ * + * @author ${author} + * @since ${date} + */ +<#if kotlin> +interface ${table.mapperName} : ${superMapperClass}<${entity}> +<#else> +public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { + +} + diff --git a/adc-da-main/src/main/resources/templates/mapper.xml.ftl b/adc-da-main/src/main/resources/templates/mapper.xml.ftl new file mode 100644 index 00000000..d9ca71c4 --- /dev/null +++ b/adc-da-main/src/main/resources/templates/mapper.xml.ftl @@ -0,0 +1,39 @@ + + + + +<#if enableCache> + + + + +<#if baseResultMap> + + +<#list table.fields as field> +<#if field.keyFlag><#--生成主键排在第一位--> + + + +<#list table.commonFields as field><#--生成公共字段 --> + + +<#list table.fields as field> +<#if !field.keyFlag><#--生成普通字段 --> + + + + + + +<#if baseColumnList> + + +<#list table.commonFields as field> + ${field.name}, + + ${table.fieldNames} + + + + diff --git a/adc-da-main/src/main/resources/templates/service.java.ftl b/adc-da-main/src/main/resources/templates/service.java.ftl new file mode 100644 index 00000000..e3232f3a --- /dev/null +++ b/adc-da-main/src/main/resources/templates/service.java.ftl @@ -0,0 +1,20 @@ +package ${package.Service}; + +import ${package.Entity}.${entity}; +import ${superServiceClassPackage}; + +/** + *

+ * ${table.comment!} 服务类 + *

+ * + * @author ${author} + * @since ${date} + */ +<#if kotlin> +interface ${table.serviceName} : ${superServiceClass}<${entity}> +<#else> +public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { + +} + diff --git a/adc-da-main/src/main/resources/templates/serviceImpl.java.ftl b/adc-da-main/src/main/resources/templates/serviceImpl.java.ftl new file mode 100644 index 00000000..aeebd14c --- /dev/null +++ b/adc-da-main/src/main/resources/templates/serviceImpl.java.ftl @@ -0,0 +1,26 @@ +package ${package.ServiceImpl}; + +import ${package.Entity}.${entity}; +import ${package.Mapper}.${table.mapperName}; +import ${package.Service}.${table.serviceName}; +import ${superServiceImplClassPackage}; +import org.springframework.stereotype.Service; + +/** + *

+ * ${table.comment!} 服务实现类 + *

+ * + * @author ${author} + * @since ${date} + */ +@Service +<#if kotlin> +open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} { + +} +<#else> +public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { + +} + diff --git a/adc-da-main/src/main/resources/ueditor/config.json b/adc-da-main/src/main/resources/ueditor/config.json new file mode 100644 index 00000000..77a0a70f --- /dev/null +++ b/adc-da-main/src/main/resources/ueditor/config.json @@ -0,0 +1,97 @@ +/* 前后端通信相关的配置,注释只允许使用多行方式 */ +{ + /* 上传图片配置项 */ + "imageActionName": "/api/ueditor/uploadImageData", /* 执行上传图片的action名称 */ + "imageFieldName": "upfile", /* 提交的图片表单名称 */ + "imageMaxSize": 2048000, /* 上传大小限制,单位B */ + "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */ + "imageCompressEnable": true, /* 是否压缩图片,默认是true */ + "imageCompressBorder": 1600, /* 图片压缩最长边限制 */ + "imageInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageUrlPrefix": "", /* 图片访问路径前缀 */ + "localSavePathPrefix":"upload/images/inform", + "imagePathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ + /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ + /* {time} 会替换成时间戳 */ + /* {yyyy} 会替换成四位年份 */ + /* {yy} 会替换成两位年份 */ + /* {mm} 会替换成两位月份 */ + /* {dd} 会替换成两位日期 */ + /* {hh} 会替换成两位小时 */ + /* {ii} 会替换成两位分钟 */ + /* {ss} 会替换成两位秒 */ + /* 非法字符 \ : * ? " < > | */ + /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ + + /* 涂鸦图片上传配置项 */ + "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */ + "scrawlFieldName": "upfile", /* 提交的图片表单名称 */ + "scrawlPathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */ + "scrawlUrlPrefix": "", /* 图片访问路径前缀 */ + "scrawlInsertAlign": "none", + + /* 截图工具上传 */ + "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */ + "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */ + "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */ + + /* 抓取远程图片配置 */ + "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], + "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */ + "catcherFieldName": "source", /* 提交的图片列表表单名称 */ + "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "catcherUrlPrefix": "", /* 图片访问路径前缀 */ + "catcherMaxSize": 2048000, /* 上传大小限制,单位B */ + "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */ + /*抓取远程图片是否开启,默认true*/ + "catchRemoteImageEnable": false, + + /* 上传视频配置 */ + "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */ + "videoFieldName": "upfile", /* 提交的视频表单名称 */ + "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "videoUrlPrefix": "", /* 视频访问路径前缀 */ + "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */ + "videoAllowFiles": [ + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */ + + /* 上传文件配置 */ + "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */ + "fileFieldName": "upfile", /* 提交的文件表单名称 */ + "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "fileUrlPrefix": "", /* 文件访问路径前缀 */ + "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */ + "fileAllowFiles": [ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", + ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", + ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" + ], /* 上传文件格式显示 */ + + /* 列出指定目录下的图片 */ + "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */ + "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出图片的目录 */ + "imageManagerListSize": 20, /* 每次列出文件数量 */ + "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */ + "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */ + + /* 列出指定目录下的文件 */ + "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */ + "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */ + "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */ + "fileManagerListSize": 20, /* 每次列出文件数量 */ + "fileManagerAllowFiles": [ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", + ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", + ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" + ] /* 列出的文件类型 */ + +} \ No newline at end of file diff --git a/adc-da-main/src/main/resources/white/uploadWhite.txt b/adc-da-main/src/main/resources/white/uploadWhite.txt new file mode 100644 index 00000000..fd4a3ae3 --- /dev/null +++ b/adc-da-main/src/main/resources/white/uploadWhite.txt @@ -0,0 +1,12 @@ +pdf +doc +docx +xlsx +xls +zip +rar +jpg +jpge +png +gif +ppt \ No newline at end of file diff --git a/adc-da-main/src/main/resources/white/xssWhite.txt b/adc-da-main/src/main/resources/white/xssWhite.txt new file mode 100644 index 00000000..b724e4db --- /dev/null +++ b/adc-da-main/src/main/resources/white/xssWhite.txt @@ -0,0 +1 @@ +/upload/ \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java index 5bd7e17e..87b321e4 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarStandUnqualified/controller/SarStandUnqualifiedController.java @@ -2,6 +2,7 @@ package com.adc.da.slrs.sarStandUnqualified.controller; import com.adc.da.slrs.sarStandUnqualified.service.ISarStandUnqualifiedService; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import com.adc.da.slrs.sarStandUnqualified.entity.SarStandUnqualified; @@ -23,4 +24,6 @@ import com.adc.da.base.web.BaseController; public class SarStandUnqualifiedController extends BaseController { @Autowired private ISarStandUnqualifiedService sarStandUnqualifiedService; + + }