浏览代码

第三方系统网关过滤器
认证中心

by su 3 年之前
父节点
当前提交
ac6c352822
共有 21 个文件被更改,包括 1514 次插入1018 次删除
  1. 2 0
      .gitignore
  2. 43 0
      4dkankan-center-auth/src/main/java/com/fdkankan/auth/schedul/DeveloperSchedul.java
  3. 30 0
      4dkankan-center-auth/src/main/resources/bootstrap.yml
  4. 231 0
      4dkankan-center-auth/src/main/resources/logback-spring.xml
  5. 4 4
      4dkankan-common/pom.xml
  6. 0 179
      4dkankan-common/src/main/java/com/fdkankan/common/base/AbstractService.java
  7. 0 38
      4dkankan-common/src/main/java/com/fdkankan/common/base/IOperations.java
  8. 0 51
      4dkankan-common/src/main/java/com/fdkankan/common/base/IServiceOperations.java
  9. 8 0
      4dkankan-common/src/main/java/com/fdkankan/common/constant/RedisKey.java
  10. 4 0
      4dkankan-common/src/main/java/com/fdkankan/common/constant/ServerCode.java
  11. 1 1
      4dkankan-common/src/main/java/com/fdkankan/common/exception/BusinessException.java
  12. 2 2
      4dkankan-common/src/main/java/com/fdkankan/common/exception/GlobalExceptionHandler.java
  13. 136 0
      4dkankan-common/src/main/java/com/fdkankan/common/util/DataUtils.java
  14. 57 0
      4dkankan-common/src/main/java/com/fdkankan/common/util/SHAUtils.java
  15. 724 724
      4dkankan-common/src/main/java/com/fdkankan/common/util/UploadToOssUtil.java
  16. 117 0
      4dkankan-gateway/src/main/java/com/fdkankan/gateway/dto/TmDeveloperDto.java
  17. 10 2
      4dkankan-gateway/src/main/java/com/fdkankan/gateway/exception/JsonErrorWebExceptionHandler.java
  18. 24 0
      4dkankan-gateway/src/main/java/com/fdkankan/gateway/factory/AuthFilterGatewayFilterFactory.java
  19. 104 0
      4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/AppAuthFilter.java
  20. 12 12
      4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/TokenFilter.java
  21. 5 5
      4dkankan-pom/src/test/java/TestAutoGenerate.java

+ 2 - 0
.gitignore

@@ -37,3 +37,5 @@ gen
 /4dkankan-gateway/target/
 /4dkankan-gateway/target/
 
 
 
 
+4dkankan-pom/src/test/java/TestAutoGenerate.java
+

+ 43 - 0
4dkankan-center-auth/src/main/java/com/fdkankan/auth/schedul/DeveloperSchedul.java

@@ -0,0 +1,43 @@
+package com.fdkankan.auth.schedul;
+
+import com.alibaba.fastjson.JSON;
+import com.fdkankan.auth.entity.TmDeveloper;
+import com.fdkankan.auth.service.ITmDeveloperService;
+import com.fdkankan.common.constant.RedisKey;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@Slf4j
+public class DeveloperSchedul {
+
+
+    @Autowired
+    private ITmDeveloperService tmDeveloperService;
+
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+
+    /**
+     * 加载开发者信息到缓存,上一次执行完毕后五分钟执行
+     */
+    @Scheduled(fixedDelay=300000)
+    public void loadTmDeveloperToRedisCache(){
+        log.info("-----从mysql中加载开发者信息表到redis缓存定时任务开始执行------");
+        List<TmDeveloper> list = tmDeveloperService.list();
+        list.stream().forEach(tmDeveloper -> {
+            String key = String.format(RedisKey.TM_DEVELOPER, tmDeveloper.getAppId());
+            redisTemplate.opsForValue().set(key, JSON.toJSONString(tmDeveloper));
+        });
+        log.info("-----从mysql中加载开发者信息表到redis缓存定时任务执行结束------");
+
+
+    }
+
+}

+ 30 - 0
4dkankan-center-auth/src/main/resources/bootstrap.yml

@@ -0,0 +1,30 @@
+server:
+  port:8087
+spring:
+  application:
+    name: 4dkankan-center-auth
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 192.168.0.47:8848
+  datasource:
+    name: test
+    url: jdbc:mysql://47.113.81.43:3306/4dage-api-gateway?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&allowMultiQueries=true
+    username: root
+    password: zfb20211015G
+    type: com.alibaba.druid.pool.DruidDataSource
+    driver-class-name: com.mysql.cj.jdbc.Driver
+  redis:
+    host: 120.25.146.52
+    port: 6379
+    jedis:
+      pool:
+        max-active: 8
+        max-wait: -1
+        max-idle: 50
+        min-idle: 8
+    lettuce:
+      shutdown-timeout: 0
+
+logging:
+  config: classpath:logback-spring.xml

+ 231 - 0
4dkankan-center-auth/src/main/resources/logback-spring.xml

@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
+<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
+<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
+<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<configuration scan="true" scanPeriod="10 seconds">
+
+	<contextName>logback</contextName>
+	<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
+	<property name="log.path" value="/home/logs/4dkankan_center_application" />
+
+	<!-- 彩色日志 -->
+	<!-- 彩色日志依赖的渲染类 -->
+	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
+	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
+	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
+	<!-- 彩色日志格式 -->
+	<property name="CONSOLE_LOG_PATTERN"
+		value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
+
+	<!--输出到控制台 -->
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息 -->
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>info</level>
+		</filter>
+		<encoder>
+			<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
+			<!-- 设置字符集 -->
+			<charset>UTF-8</charset>
+		</encoder>
+	</appender>
+	<!--输出到文件 -->
+
+	<!-- 时间滚动输出 level为 DEBUG 日志 -->
+	<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_debug.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- 日志归档 -->
+			<fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录debug级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>debug</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 时间滚动输出 level为 INFO 日志 -->
+	<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_info.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- 每天日志归档路径以及格式 -->
+			<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录info级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>info</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 时间滚动输出 level为 WARN 日志 -->
+	<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_warn.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录warn级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>warn</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+
+	<!-- 时间滚动输出 level为 ERROR 日志 -->
+	<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_error.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录ERROR级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	
+	<appender name="PROGRAM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/program/log_program.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/program/log-program-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录ERROR级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	<logger name="programLog" level="INFO" additivity="true">
+        <appender-ref ref="PROGRAM_FILE"/>
+    </logger>
+
+	<appender name="VISIT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/visit/log_visit.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/visit/log-visit-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录ERROR级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	<logger name="visitLog" level="INFO" additivity="true">
+        <appender-ref ref="VISIT_FILE"/>
+    </logger>
+
+	<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, 
+		DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。 addtivity:是否向上级logger传递打印信息。默认是true。 -->
+	<!--<logger name="org.springframework.web" level="info"/> -->
+	<!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> -->
+	<!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: -->
+	<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
+
+	<root level="info">
+		<appender-ref ref="CONSOLE" />
+		<appender-ref ref="DEBUG_FILE" />
+		<appender-ref ref="INFO_FILE" />
+		<appender-ref ref="WARN_FILE" />
+		<appender-ref ref="ERROR_FILE" />
+	</root>
+
+	<!--生产环境:输出到文件 -->
+	<!--<springProfile name="pro"> -->
+	<!--<root level="info"> -->
+	<!--<appender-ref ref="CONSOLE" /> -->
+	<!--<appender-ref ref="DEBUG_FILE" /> -->
+	<!--<appender-ref ref="INFO_FILE" /> -->
+	<!--<appender-ref ref="ERROR_FILE" /> -->
+	<!--<appender-ref ref="WARN_FILE" /> -->
+	<!--</root> -->
+	<!--</springProfile> -->
+
+</configuration>
+
+

+ 4 - 4
4dkankan-common/pom.xml

@@ -14,10 +14,10 @@
     <artifactId>4dkankan-common</artifactId>
     <artifactId>4dkankan-common</artifactId>
 
 
     <dependencies>
     <dependencies>
-        <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.mybatis.spring.boot</groupId>-->
+<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
+<!--        </dependency>-->
 
 
         <dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <groupId>org.projectlombok</groupId>

+ 0 - 179
4dkankan-common/src/main/java/com/fdkankan/common/base/AbstractService.java

@@ -1,179 +0,0 @@
-package com.fdkankan.common.base;
-
-import com.fdkankan.common.response.PageInfo;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-public abstract class AbstractService<T extends Serializable> implements IServiceOperations<T> {
-
-	protected abstract IOperations<T> getMapper();
-
-	protected String tableName = "";
-
-	public abstract void setTableName(String tableName);
-
-	protected String getTableName() {
-		return this.tableName;
-	}
-
-	@Override
-	public void insert(T entity) {
-		getMapper().insert(entity, this.getTableName());
-	}
-
-	@Override
-	public int insertByBatch(List<T> list) {
-		return getMapper().insertByBatch(list, this.getTableName());
-	}
-
-	@Override
-	public int update(List<T> list) {
-		return getMapper().update(list, this.getTableName());
-	}
-	@Override
-	public int update(T entity) {
-		List<T> entityList = new ArrayList<>();
-		entityList.add(entity);
-		return getMapper().update(entityList, this.getTableName());
-	}
-
-	@Override
-	public int updateByBatch(LinkedHashMap<String, String> condition, String field) {
-		return getMapper().updateByBatch(condition, field, this.getTableName());
-	}
-
-	@Override
-	public T getById(int id) {
-		return getMapper().getById(id, this.getTableName());
-	}
-
-	@Override
-	public T getOne(LinkedHashMap<String, String> condition) {
-		String field = null;
-		return this.getOne(condition, field, this.getTableName());
-	}
-
-	@Override
-	public T getOne(LinkedHashMap<String, String> condition, String field) {
-		return getMapper().getOne(condition, field, this.getTableName());
-	}
-
-	@Override
-	public int getCount(LinkedHashMap<String, String> condition, String field) {
-		return getMapper().getCount(condition, field, this.getTableName());
-	}
-
-	@Override
-	public List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize, String order, String field) {
-		int offset = (pageNo - 1) * pageSize;
-		int limit = pageSize;
-		return getMapper().getList(condition, offset, limit, order, field, this.getTableName());
-	}
-
-	@Override
-	public List<T> getAllList(LinkedHashMap<String, String> condition) {
-		return this.getAllList(condition, null);
-	}
-
-	@Override
-	public List<T> getAllList(LinkedHashMap<String, String> condition, String order) {
-		if(order == null || order.trim().length() == 0) {
-			order = null;
-		}
-		return getMapper().getList(condition, 0, 0, order, null, this.getTableName());
-	}
-
-	@Override
-	public List<T> getList(int pageNo, int pageSize) {
-		String order = null;
-		return this.getList(pageNo, pageSize, order);
-	}
-
-	@Override
-	public List<T> getList(int pageNo, int pageSize, String order) {
-		String field = null;
-		return this.getList(pageNo, pageSize, order, field);
-	}
-
-	@Override
-	public List<T> getList(int pageNo, int pageSize, String order, String field) {
-		LinkedHashMap<String, String> condition = new LinkedHashMap<String, String>();
-		return this.getList(condition, pageNo, pageSize, order, field);
-	}
-
-	@Override
-	public List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize) {
-		String order = null;
-		return this.getList(condition, pageNo, pageSize, order);
-	}
-
-	@Override
-	public List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize, String order) {
-		String field = null;
-		return this.getList(condition, pageNo, pageSize, order, field);
-	}
-
-	@Override
-	public int existTable(String tableName) {
-		return getMapper().existTable(tableName);
-	}
-
-	@Override
-	public int createTable(String tableName) {
-		return getMapper().createTable(tableName);
-	}
-
-	// 以下暂时没有场景用到,留在这里,需要时候根据实际情况进行修改即可。
-	@Override
-	public void insert(T entity, String tableName) {
-		this.getMapper().insert(entity, tableName);
-	}
-
-	@Override
-	public int insertByBatch(List<T> list, String tableName) {
-		return this.getMapper().insertByBatch(list, tableName);
-	}
-
-	@Override
-	public int update(List<T> list, String tableName) {
-		return this.update(list, tableName);
-	}
-
-	@Override
-	public int updateByBatch(LinkedHashMap<String, String> condition, String field, String tableName) {
-		return this.getMapper().updateByBatch(condition, field, this.getTableName());
-	}
-
-	@Override
-	public T getById(int id, String tableName) {
-		return this.getMapper().getById(id, tableName);
-	}
-
-	@Override
-	public T getOne(LinkedHashMap<String, String> condition, String field, String tableName) {
-		return this.getMapper().getOne(condition, field, tableName);
-	}
-
-	@Override
-	public int getCount(LinkedHashMap<String, String> condition, String field, String tableName) {
-		return this.getMapper().getCount(condition, field, tableName);
-	}
-
-	@Override
-	public List<T> getList(LinkedHashMap<String, String> condition, int offset, int limit, String order, String field, String tableName) {
-		return this.getMapper().getList(condition, offset, limit, order, field, tableName);
-	}
-
-	@Override
-	public PageInfo pageInfo(LinkedHashMap<String, String> condition, int pageNo, int pageSize, String order) {
-		List<T> list = this.getList(condition, pageNo, pageSize, order);
-		int count = this.getCount(condition, null);
-		return  PageInfo.pageInfo(pageNo,pageSize,count,list);
-	}
-}
-
-
-

+ 0 - 38
4dkankan-common/src/main/java/com/fdkankan/common/base/IOperations.java

@@ -1,38 +0,0 @@
-package com.fdkankan.common.base;
-
-
-import org.apache.ibatis.annotations.Param;
-
-import java.io.Serializable;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-public interface IOperations<T extends Serializable> {
-
-	void insert(@Param("entity") final T entity, @Param("tableName") String tableName);
-
-	int insertByBatch(@Param("list") List<T> list, @Param("tableName") String tableName);
-
-	int update(@Param("list") List<T> list, @Param("tableName") String tableName);
-
-	int updateByBatch(@Param("condition") LinkedHashMap<String, String> condition, @Param("field") String field, @Param("tableName") String tableName);
-
-	T getById(@Param("id") final int id, @Param("tableName") String tableName);
-
-	T getOne(@Param("condition") LinkedHashMap<String, String> condition, @Param("field") String field, @Param("tableName") String tableName);
-
-	int getCount(@Param("condition") LinkedHashMap<String, String> condition, @Param("field") String field, @Param("tableName") String tableName);
-
-	List<T> getList(@Param("condition") LinkedHashMap<String, String> condition, @Param("offset") int offset, @Param("limit") int limit, @Param("order") String order,
-			@Param("field") String field, @Param("tableName") String tableName);
-
-	// 以下方法特殊,为判断表是否存在,批量和创建表
-
-	int existTable(@Param("tableName") String tableName);
-
-	int createTable(@Param("tableName") String tableName);
-
-}
-
-
-

+ 0 - 51
4dkankan-common/src/main/java/com/fdkankan/common/base/IServiceOperations.java

@@ -1,51 +0,0 @@
-package com.fdkankan.common.base;
-
-import com.fdkankan.common.response.PageInfo;
-
-import java.io.Serializable;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-public interface IServiceOperations<T extends Serializable> extends IOperations<T> {
-
-	void setTableName(String tableName);
-
-	void insert(final T entity);
-
-	int insertByBatch(List<T> list);
-
-	int update(List<T> list);
-
-	int update (final T entity);
-
-	int updateByBatch(LinkedHashMap<String, String> condition, String field);
-
-	T getById(final int id);
-
-	T getOne(LinkedHashMap<String, String> condition, String field);
-
-	int getCount(LinkedHashMap<String, String> condition, String field);
-
-	List<T> getList(int pageNo, int pageSize);
-
-	List<T> getList(int pageNo, int pageSize, String order);
-
-	List<T> getList(int pageNo, int pageSize, String order, String field);
-
-	List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize);
-
-	List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize, String order);
-
-	public List<T> getAllList(LinkedHashMap<String, String> condition);
-
-	public List<T> getAllList(LinkedHashMap<String, String> condition, String order);
-
-	T getOne(LinkedHashMap<String, String> condition);
-
-	List<T> getList(LinkedHashMap<String, String> condition, int pageNo, int pageSize, String order, String field);
-
-	PageInfo pageInfo (LinkedHashMap<String,String> condition ,int pageNo,int pageSize,String order);
-}
-
-
-

+ 8 - 0
4dkankan-common/src/main/java/com/fdkankan/common/constant/RedisKey.java

@@ -2,6 +2,14 @@ package com.fdkankan.common.constant;
 
 
 public class RedisKey {
 public class RedisKey {
 
 
+    /**
+     * 登录token
+     */
     public static String TOKEN_USER_TYPE = "token:user:type:%s:%s";
     public static String TOKEN_USER_TYPE = "token:user:type:%s:%s";
 
 
+    /**
+     * 开发者信息
+     */
+    public static String TM_DEVELOPER = "developer:appid:%s";
+
 }
 }

+ 4 - 0
4dkankan-common/src/main/java/com/fdkankan/common/constant/ServerCode.java

@@ -5,11 +5,15 @@ public enum ServerCode {
 	SUCCESS(0, "成功"),
 	SUCCESS(0, "成功"),
 	SYSTEM_ERROR(-1, "服务器异常"),
 	SYSTEM_ERROR(-1, "服务器异常"),
 	PARAM_ERROR(-2, "解析请求参数出错"),
 	PARAM_ERROR(-2, "解析请求参数出错"),
+	PARAM_REQUIRED(-3, "缺少必要参数"),
 
 
 	AUTH_FAIL(3000, "鉴权失败!"),
 	AUTH_FAIL(3000, "鉴权失败!"),
 	NON_TOKEN(3001, "无token,请重新登录"),
 	NON_TOKEN(3001, "无token,请重新登录"),
 	TOKEN_ILLEGAL(3002, "token不合法"),
 	TOKEN_ILLEGAL(3002, "token不合法"),
 	TOKEN_NOT_FOUND(3003, "用户未登录"),
 	TOKEN_NOT_FOUND(3003, "用户未登录"),
+
+
+	APP_ID_ILLEGAL(3100 , "非法的APP ID")
 	;
 	;
 	
 	
 	private Integer code;
 	private Integer code;

+ 1 - 1
4dkankan-common/src/main/java/com/fdkankan/common/exception/BusinessException.java

@@ -10,6 +10,6 @@ import lombok.Data;
 @AllArgsConstructor
 @AllArgsConstructor
 public class BusinessException extends RuntimeException {
 public class BusinessException extends RuntimeException {
     private int code;
     private int code;
-    private String msg;
+    private String message;
 
 
 }
 }

+ 2 - 2
4dkankan-common/src/main/java/com/fdkankan/common/exception/GlobalExceptionHandler.java

@@ -33,7 +33,7 @@ public class GlobalExceptionHandler {
     @ResponseBody
     @ResponseBody
     @ExceptionHandler(value = BusinessException.class)
     @ExceptionHandler(value = BusinessException.class)
     public ResultData businessExceptionHandler(HttpServletRequest httpServletRequest, BusinessException e) {
     public ResultData businessExceptionHandler(HttpServletRequest httpServletRequest, BusinessException e) {
-        log.info("业务异常code:" + e.getCode() + "msg:" + e.getMsg());
-        return ResultData.error(e.getCode(), e.getMsg());
+        log.info("业务异常code:" + e.getCode() + "msg:" + e.getMessage());
+        return ResultData.error(e.getCode(), e.getMessage());
     }
     }
 }
 }

+ 136 - 0
4dkankan-common/src/main/java/com/fdkankan/common/util/DataUtils.java

@@ -0,0 +1,136 @@
+package com.fdkankan.common.util;
+
+import cn.hutool.core.util.StrUtil;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author abnerhou
+ * @date 2020/4/23 17:35
+ * @desciption
+ */
+@Component
+public class DataUtils {
+
+    public static BigDecimal getBigDecimalObj(Object data) {
+
+        if (null == data) {
+            return null;
+        } else if (data instanceof String) {
+            String dataStr = (String) data;
+            if (!StringUtils.isEmpty(dataStr.trim())) {
+                return new BigDecimal(dataStr.trim());
+            }
+        } else if (data instanceof Long) {
+            Long dataLong = (Long) data;
+            return BigDecimal.valueOf(dataLong);
+        } else if (data instanceof Integer) {
+            Integer dataInt = (Integer) data;
+            return BigDecimal.valueOf(dataInt);
+
+        } else if (data instanceof Double) {
+            Double dataDouble = (Double) data;
+            return BigDecimal.valueOf(dataDouble);
+        }
+
+        return null;
+
+    }
+
+    public static Integer getInteger(Object object) {
+        if (null == object) {
+            return new Integer(0);
+        }
+        if (object instanceof String) {
+            String ojStr = (String) object;
+            if (StringUtils.isEmpty(ojStr)) {
+                //TODO:在斟酌这里的处理方式
+                return new Integer(0);
+            } else {
+                return new Integer(Integer.parseInt(ojStr.trim()));
+            }
+        } else if (object instanceof Integer) {
+            return (Integer) object;
+        } else if (object instanceof Long) {
+            return (Integer) object;
+        } else if (object instanceof Double) {
+            return (Integer) object;
+        } else {
+            return new Integer(0);
+        }
+    }
+
+    public static Long getLongReturnNullIfNotExit(Object num){
+        if(null == num){
+            return null;
+        }else if(num instanceof String){
+            if(StrUtil.isNotBlank((String) num)){
+                String numStr = (String) num;
+                return Long.parseLong(numStr.trim());
+            }
+        }else if(num instanceof Integer){
+            return (Long) num;
+        }else if(num instanceof  Long){
+            return (Long) num;
+        }
+        return null;
+    }
+
+    public static Integer getIntegerWithDefault(Object object, boolean withDefault) {
+        if (null == object) {
+
+            return withDefault ? new Integer(0) : null;
+        }
+        if (object instanceof String) {
+            String ojStr = (String) object;
+            if (StringUtils.isEmpty(ojStr)) {
+
+                return withDefault ? new Integer(0) : null;
+            } else {
+                return new Integer(Integer.parseInt(ojStr.trim()));
+            }
+        } else if (object instanceof Integer) {
+            return (Integer) object;
+        } else if (object instanceof Long) {
+            return (Integer) object;
+        } else if (object instanceof Double) {
+            return (Integer) object;
+        } else {
+            return withDefault ? new Integer(0) : null;
+        }
+    }
+
+    public static Map<String, Object> assembleResult(long totalNum, long totalPageNum, long currPageNum, Object list) {
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("totalNum", totalNum);
+        resultMap.put("totalPageNum", totalPageNum);
+        resultMap.put("curPage", currPageNum);
+        resultMap.put("list", list);
+        return resultMap;
+    }
+
+//    public static <T> void assembleTimeQueryWrapper(Map<String, Object> constantQuery, String dynamicQuery,
+//                                                    QueryWrapper<T> queryWrapper, String idQuery,
+//                                                    String secondQuery, String thirdQuery) {
+//        assembleConstantQuery(queryWrapper, constantQuery);
+//        if (org.apache.commons.lang3.StringUtils.isNotBlank(dynamicQuery)) {
+//            queryWrapper.and(wrapper -> wrapper
+//                    .or().like(org.apache.commons.lang3.StringUtils.isNotBlank(secondQuery), secondQuery, dynamicQuery)
+//                    .or().like(org.apache.commons.lang3.StringUtils.isNotBlank(thirdQuery), thirdQuery, dynamicQuery)
+//                    .or().like(dynamicQuery.length() <= 32 && org.apache.commons.lang3.StringUtils.isNotBlank(idQuery), idQuery, dynamicQuery));
+//        }
+//
+//    }
+
+//    public static <T> void assembleConstantQuery(QueryWrapper<T> queryWrapper, Map<String, Object> constantQuery) {
+//        if (null != queryWrapper && !CollectionUtils.isEmpty(constantQuery)) {
+//            for (Map.Entry<String, Object> entry : constantQuery.entrySet()) {
+//                queryWrapper.eq(entry.getKey(), entry.getValue());
+//            }
+//        }
+//    }
+}

+ 57 - 0
4dkankan-common/src/main/java/com/fdkankan/common/util/SHAUtils.java

@@ -0,0 +1,57 @@
+package com.fdkankan.common.util;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * @author abnerhou
+ * @date 2020/6/5 11:33
+ * @desciption
+ */
+public class SHAUtils {
+
+    /**
+     * 利用java原生的类实现SHA256加密
+     *
+     * @param str
+     * @return
+     */
+    public static String getSHA256(String str) {
+        MessageDigest messageDigest;
+        String encodestr = "";
+        try {
+            messageDigest = MessageDigest.getInstance("SHA-256");
+            messageDigest.update(str.getBytes("UTF-8"));
+            encodestr = byte2Hex(messageDigest.digest());
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return encodestr;
+    }
+
+
+    //15 转16进制
+
+    /**
+     * 将byte转为16进制
+     *
+     * @param bytes
+     * @return
+     */
+    public static String byte2Hex(byte[] bytes) {
+        StringBuffer stringBuffer = new StringBuffer();
+        String temp = null;
+        for (int i = 0; i < bytes.length; i++) {
+            temp = Integer.toHexString(bytes[i] & 0xFF);
+            if (temp.length() == 1) {
+                //1得到一位的进行补0操作
+                stringBuffer.append("0");
+            }
+            stringBuffer.append(temp);
+        }
+        return stringBuffer.toString();
+    }
+}

文件差异内容过多而无法显示
+ 724 - 724
4dkankan-common/src/main/java/com/fdkankan/common/util/UploadToOssUtil.java


+ 117 - 0
4dkankan-gateway/src/main/java/com/fdkankan/gateway/dto/TmDeveloperDto.java

@@ -0,0 +1,117 @@
+package com.fdkankan.gateway.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 开发者信息表
+ * </p>
+ *
+ * @author ${author}
+ * @since 2021-12-23
+ */
+@Data
+public class TmDeveloperDto implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 开发者id
+     */
+    private String developerId;
+
+    /**
+     * 开发者应用id
+     */
+    private String appId;
+
+    /**
+     * 开发者所属公司统一社会信用代码
+     */
+    private String companyCreditCode;
+
+    /**
+     * 开发者应用密钥
+     */
+    private String appSecret;
+
+    /**
+     * 模式
+     */
+    private String state;
+
+    /**
+     * 使用的微信小程序的app id
+     */
+    private String wxAppId;
+
+    /**
+     * 开发者所属公司
+     */
+    private String company;
+
+    /**
+     * 开发者所属公司固话号码
+     */
+    private String tel;
+
+    /**
+     * 开发者所属公司法人名字
+     */
+    private String legalPersonName;
+
+    /**
+     * 开发者所属公司法人手机号码
+     */
+    private String legalPersonPhone;
+
+    /**
+     * 是否可用: 2审批通过 1 待审批 0 不可用
+     */
+    private Integer enable;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 最新修改时间
+     */
+    private Date lastModifyDatetime;
+
+    /**
+     * openApi回调开发者接口的url
+     */
+    private String callBackUrl;
+
+    /**
+     * 管理者手机号
+     */
+    private String adminPhone;
+
+    /**
+     * 管理者邮箱
+     */
+    private String adminEmail;
+
+    /**
+     * 微信小程序校验文件链接
+     */
+    private String wxMiniProgramFile;
+
+    /**
+     * 所属领域
+     */
+    private String domainType;
+
+    /**
+     * 是否需要将返回参数拼到url上:Y 需要 N不需要
+     */
+    private String respondToUrl;
+
+
+}

+ 10 - 2
4dkankan-gateway/src/main/java/com/fdkankan/gateway/exception/JsonErrorWebExceptionHandler.java

@@ -2,6 +2,7 @@ package com.fdkankan.gateway.exception;
 
 
 
 
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.constant.ServerCode;
+import com.fdkankan.common.exception.BusinessException;
 import org.springframework.boot.autoconfigure.web.ErrorProperties;
 import org.springframework.boot.autoconfigure.web.ErrorProperties;
 import org.springframework.boot.autoconfigure.web.ResourceProperties;
 import org.springframework.boot.autoconfigure.web.ResourceProperties;
 import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;
 import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;
@@ -26,11 +27,18 @@ public class JsonErrorWebExceptionHandler extends DefaultErrorWebExceptionHandle
 
 
     @Override
     @Override
     protected Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
     protected Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
+
         // 这里其实可以根据异常类型进行定制化逻辑
         // 这里其实可以根据异常类型进行定制化逻辑
         Throwable error = super.getError(request);
         Throwable error = super.getError(request);
         Map<String, Object> errorAttributes = new HashMap<>(8);
         Map<String, Object> errorAttributes = new HashMap<>(8);
-        errorAttributes.put("code", ServerCode.SYSTEM_ERROR.code());
-        errorAttributes.put("message", ServerCode.SYSTEM_ERROR.message());
+
+        if(error instanceof BusinessException){
+            errorAttributes.put("code", ((BusinessException) error).getCode());
+            errorAttributes.put("message", ((BusinessException) error).getMessage());
+        }else{
+            errorAttributes.put("code", ServerCode.SYSTEM_ERROR.code());
+            errorAttributes.put("message", ServerCode.SYSTEM_ERROR.message());
+        }
         errorAttributes.put("method", request.methodName());
         errorAttributes.put("method", request.methodName());
         errorAttributes.put("path", request.path());
         errorAttributes.put("path", request.path());
         errorAttributes.put("timestamp", Calendar.getInstance().getTimeInMillis());
         errorAttributes.put("timestamp", Calendar.getInstance().getTimeInMillis());

+ 24 - 0
4dkankan-gateway/src/main/java/com/fdkankan/gateway/factory/AuthFilterGatewayFilterFactory.java

@@ -0,0 +1,24 @@
+package com.fdkankan.gateway.factory;
+
+import com.fdkankan.gateway.filter.AppAuthFilter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * 第三方系统访问过滤器
+ */
+@Component
+public class AuthFilterGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {
+
+    @Autowired
+    private AppAuthFilter appAuthFilter;
+
+    @Override
+    public GatewayFilter apply(Object filter) {
+        return appAuthFilter;
+    }
+}
+
+

+ 104 - 0
4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/AppAuthFilter.java

@@ -0,0 +1,104 @@
+package com.fdkankan.gateway.filter;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.fdkankan.common.constant.RedisKey;
+import com.fdkankan.common.constant.ServerCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.DataUtils;
+import com.fdkankan.common.util.SHAUtils;
+import com.fdkankan.gateway.dto.TmDeveloperDto;
+import com.fdkankan.gateway.dto.User;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.core.Ordered;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@Log4j2
+public class AppAuthFilter implements GatewayFilter, Ordered {
+
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    @Override
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+
+        StringBuilder logBuilder = new StringBuilder();
+        Map<String, String> params = parseRequest(exchange, logBuilder);
+        if (!CollUtil.isEmpty(params)) {
+            String token = params.get("token");
+            String appId = params.get("appId");
+            Long timeStamp = DataUtils.getLongReturnNullIfNotExit(params.get("timeStamp"));
+            log.info("鉴权流程获取到的appid={},请求路径:{}" , appId , exchange.getRequest().getURI());
+            //先获取校验app id的合法性
+            String developerJson = redisTemplate.opsForValue().get(String.format(RedisKey.TM_DEVELOPER, appId));
+            if(StrUtil.isBlank(developerJson)){
+                throw new BusinessException(ServerCode.APP_ID_ILLEGAL.code(), ServerCode.APP_ID_ILLEGAL.message());
+            }
+            //校验token的有效性
+            TmDeveloperDto tmDeveloperDto = JSONUtil.toBean(developerJson, TmDeveloperDto.class);
+            String tmpToken = tmDeveloperDto.getAppId() + tmDeveloperDto.getAppSecret() + timeStamp.toString();
+            String enCodeToken = SHAUtils.getSHA256(tmpToken);
+            if(!StrUtil.equals(enCodeToken , token)){
+                throw new BusinessException(ServerCode.TOKEN_ILLEGAL.code(), ServerCode.TOKEN_ILLEGAL.message());
+            }
+            //校验数据是否已经被串改放到controller里面校验
+            log.info("------网关基础校验通过-------");
+        }else{
+            throw new BusinessException(ServerCode.PARAM_REQUIRED.code(), ServerCode.PARAM_REQUIRED.message());
+        }
+        return chain.filter(exchange);
+    }
+
+    private Map<String, String> parseRequest(ServerWebExchange exchange, StringBuilder logBuilder) {
+        ServerHttpRequest serverHttpRequest = exchange.getRequest();
+        String method = serverHttpRequest.getMethodValue().toUpperCase();
+        logBuilder.append(method).append(",").append(serverHttpRequest.getURI());
+        MultiValueMap<String, String> query = serverHttpRequest.getQueryParams();
+        Map<String, String> params = new HashMap<>();
+        query.forEach((k, v) -> {
+            params.put(k, v.get(0));
+        });
+        if ("POST".equals(method)) {
+            String body = exchange.getAttributeOrDefault("cachedRequestBody", "");
+            if (StrUtil.isNotBlank(body)) {
+                logBuilder.append(",body=").append(body);
+                String[] kvArray = body.split("&");
+                for (String kv : kvArray) {
+                    if (kv.indexOf("=") >= 0) {
+                        String k = kv.split("=")[0];
+                        String v = kv.split("=")[1];
+                        if (!params.containsKey(k)) {
+                            try {
+                                params.put(k, URLDecoder.decode(v, "UTF-8"));
+                            } catch (UnsupportedEncodingException e) {
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return params;
+    }
+
+    @Override
+    public int getOrder() {
+        return -20;
+    }
+}

+ 12 - 12
4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/TokenFilter.java

@@ -112,12 +112,12 @@ public class TokenFilter implements GlobalFilter, Ordered {
                 String loginType = (String)claims.get("loginType");
                 String loginType = (String)claims.get("loginType");
 
 
                 //查询redis,token是否存在
                 //查询redis,token是否存在
-                String key = String.format(RedisKey.TOKEN_USER_TYPE, userName, loginType);
-                boolean exist = redisTemplate.hasKey(key);
-                if(!exist){
-                    DataBuffer buffer = setResponseInfo(response, ResultData.error(ServerCode.TOKEN_NOT_FOUND.code(), ServerCode.TOKEN_NOT_FOUND.message()));
-                    return response.writeWith(Mono.just(buffer));
-                }
+//                String key = String.format(RedisKey.TOKEN_USER_TYPE, userName, loginType);
+//                boolean exist = redisTemplate.hasKey(key);
+//                if(!exist){
+//                    DataBuffer buffer = setResponseInfo(response, ResultData.error(ServerCode.TOKEN_NOT_FOUND.code(), ServerCode.TOKEN_NOT_FOUND.message()));
+//                    return response.writeWith(Mono.just(buffer));
+//                }
 
 
                 // TODO: 2021/12/21  校验资源权限  用户资源可以从token中取,这里暂时先写死
                 // TODO: 2021/12/21  校验资源权限  用户资源可以从token中取,这里暂时先写死
                 //根据用户ID查询角色列表
                 //根据用户ID查询角色列表
@@ -125,12 +125,12 @@ public class TokenFilter implements GlobalFilter, Ordered {
                 //遍历权限列表,对比path,如果匹配上,则放行
                 //遍历权限列表,对比path,如果匹配上,则放行
                 List<String> permissions = permissionMap.get(loginType);
                 List<String> permissions = permissionMap.get(loginType);
                 Boolean isPermission = true;
                 Boolean isPermission = true;
-                for (String permission : permissions) {
-                    if(path.contains(permission)){
-                        isPermission = true;
-                        break;
-                    }
-                }
+//                for (String permission : permissions) {
+//                    if(path.contains(permission)){
+//                        isPermission = true;
+//                        break;
+//                    }
+//                }
 
 
                 if(isPermission){
                 if(isPermission){
                     return chain.filter(exchange);
                     return chain.filter(exchange);

+ 5 - 5
4dkankan-pom/src/test/java/TestAutoGenerate.java

@@ -18,7 +18,7 @@ public class TestAutoGenerate {
         // Step2:全局配置
         // Step2:全局配置
         GlobalConfig gc = new GlobalConfig();
         GlobalConfig gc = new GlobalConfig();
         // 填写代码生成的目录(需要修改)
         // 填写代码生成的目录(需要修改)
-        String projectPath = "H:\\project\\4dkankan-parent\\4dkankan-center-platform";
+        String projectPath = "F:\\code2\\4dkankan-parent\\4dkankan-center-auth";
         // 拼接出代码最终输出的目录
         // 拼接出代码最终输出的目录
         gc.setOutputDir(projectPath + "/src/main/java");
         gc.setOutputDir(projectPath + "/src/main/java");
         // 配置开发者信息(可选)(需要修改)
         // 配置开发者信息(可选)(需要修改)
@@ -40,14 +40,14 @@ public class TestAutoGenerate {
         // Step3:数据源配置(需要修改)
         // Step3:数据源配置(需要修改)
         DataSourceConfig dsc = new DataSourceConfig();
         DataSourceConfig dsc = new DataSourceConfig();
         // 配置数据库 url 地址
         // 配置数据库 url 地址
-        dsc.setUrl("jdbc:mysql://localhost:3306/4dkankan_center_application?useUnicode=true&characterEncoding=utf8");
+        dsc.setUrl("jdbc:mysql://47.113.81.43:3306/4dage-api-gateway?useUnicode=true&characterEncoding=utf8");
         // dsc.setSchemaName("testMyBatisPlus"); // 可以直接在 url 中指定数据库名
         // dsc.setSchemaName("testMyBatisPlus"); // 可以直接在 url 中指定数据库名
         // 配置数据库驱动
         // 配置数据库驱动
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         // 配置数据库连接用户名
         // 配置数据库连接用户名
         dsc.setUsername("root");
         dsc.setUsername("root");
         // 配置数据库连接密码
         // 配置数据库连接密码
-        dsc.setPassword("123456");
+        dsc.setPassword("zfb20211015G");
         mpg.setDataSource(dsc);
         mpg.setDataSource(dsc);
 
 
         // Step:4:包配置
         // Step:4:包配置
@@ -55,7 +55,7 @@ public class TestAutoGenerate {
         // 配置父包名(需要修改)
         // 配置父包名(需要修改)
         pc.setParent("com.fdkankan");
         pc.setParent("com.fdkankan");
         // 配置模块名(需要修改)
         // 配置模块名(需要修改)
-        pc.setModuleName("agent");
+        pc.setModuleName("auth");
         // 配置 entity 包名
         // 配置 entity 包名
         pc.setEntity("entity");
         pc.setEntity("entity");
         // 配置 mapper 包名
         // 配置 mapper 包名
@@ -69,7 +69,7 @@ public class TestAutoGenerate {
         // Step5:策略配置(数据库表配置)
         // Step5:策略配置(数据库表配置)
         StrategyConfig strategy = new StrategyConfig();
         StrategyConfig strategy = new StrategyConfig();
         // 指定表名 {}
         // 指定表名 {}
-        String [] tableNames ={"t_agent_audit","t_agent","t_agent_framework","t_agent_notice"};
+        String [] tableNames ={"tm_developer"};
         strategy.setInclude(tableNames);
         strategy.setInclude(tableNames);
         // 配置数据表与实体类名之间映射的策略
         // 配置数据表与实体类名之间映射的策略
         strategy.setNaming(NamingStrategy.underline_to_camel);
         strategy.setNaming(NamingStrategy.underline_to_camel);