瀏覽代碼

first commit

15810770710@163.com 4 年之前
父節點
當前提交
df464cd4f5
共有 38 個文件被更改,包括 1927 次插入0 次删除
  1. 64 0
      deplay/ConfigMap.yml
  2. 84 0
      deplay/cloud-yysj-login-authentication.yaml
  3. 204 0
      pom.xml
  4. 17 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/Application.java
  5. 27 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/config/RedisConfig.java
  6. 80 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/config/RestTemplateConfig.java
  7. 76 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/controller/YysjUserControllder.java
  8. 71 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/controller/exception/GlobalExceptionHandle.java
  9. 67 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/database/YysjUser.java
  10. 13 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/database/sjjh_entity/Result.java
  11. 22 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/GetTokenRequest.java
  12. 13 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/TokenEntity.java
  13. 122 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/sjjh/CustomerInfo.java
  14. 15 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/sjjh/User.java
  15. 30 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/sjjh/UserAccountRes.java
  16. 37 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/response/ResultResponse.java
  17. 18 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/enums/MPEnum.java
  18. 33 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/enums/ResultEnum.java
  19. 26 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/LoginAgainException.java
  20. 26 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/ParamaterException.java
  21. 27 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/SystemBusyException.java
  22. 27 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/TokenAuthenticationFailure.java
  23. 26 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/TokenTimeoutException.java
  24. 28 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/UserNotExistException.java
  25. 18 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/mapper/YysjUserMapper.java
  26. 12 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/CheckTokenService.java
  27. 57 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/CreatUserService.java
  28. 13 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/LoginTokenService.java
  29. 10 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/LogoutService.java
  30. 28 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/SjjhOrderService.java
  31. 44 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/impl/CheckTokenServiceImpl.java
  32. 280 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/impl/LoginTokenServiceImpl.java
  33. 23 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/impl/LogoutServiceImpl.java
  34. 76 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/utils/JwtUtils.java
  35. 39 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/utils/MetaHandler.java
  36. 68 0
      src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/utils/SslUtils.java
  37. 68 0
      src/main/resources/application.yml
  38. 38 0
      src/main/resources/bootstrap.yml

+ 64 - 0
deplay/ConfigMap.yml

@@ -0,0 +1,64 @@
+kind: ConfigMap
+apiVersion: v1
+metadata:
+  name: cloud-yysj-login-authentication
+data:
+  application.yaml: |-
+    #mysql configuration
+    spring:
+      datasource:
+        username: root
+        url: jdbc:mysql://10.8.17.119:32196/cloud-yysj?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+        driver-class-name: com.mysql.cj.jdbc.Driver
+        type: com.zaxxer.hikari.HikariDataSource
+        hikari:
+          minimum-idle: 5
+          maximum-pool-size: 15
+          auto-commit: true
+          idle-timeout: 30000
+          pool-name: DatebookHikariCP
+          max-lifetime: 1800000
+          connection-timeout: 30000
+          password: 123456
+      redis:
+        host: 10.8.17.119
+        port: 32042
+        database: 3
+        timeout: 1000
+        password:
+        lettuce:
+          pool:
+            max-active: 20
+            max-wait: -1
+            min-idle: 0
+            max-idle: 10
+    #jwt token expiration time
+    auth:
+      token:
+        expire: 3600
+    mybatis:
+      configuration:
+        map-underscore-to-camel-case: true
+
+    yysj:
+      logisticsPlatform:
+        tokenUrl: https://ssl.logink.cn/authapi/rest/auth/apply?userid={userid}&password={password}&resource={resource}
+        userInfoUrl: https://auth.logink.cn/AuthenticationService/SearchService?wsdl
+        resource : 0ACA7C6BA38E0008E053C0A87F0B0008
+      redis:
+        prefix: "YYSJ_USER:"
+      sjjh:
+        info:
+          contactPerson: yysj
+          contactPhone: 13811426441
+          customerSource: 0
+          creatUserService:
+            feignValue: "http://10.8.18.171:20011"
+            feignUrl: "http://10.8.18.171:20011"
+          sjjhOrderService:
+            feignValue: "http://10.8.18.171:20181/"
+            feignUrl: "http://10.8.18.171:20181/"
+
+
+
+

+ 84 - 0
deplay/cloud-yysj-login-authentication.yaml

@@ -0,0 +1,84 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: cloud-yysj-login-authentication
+  labels:
+    app: cloud-yysj-login-authentication
+    svcEndpoints: actuator
+spec:
+  type: ClusterIP
+  ports:
+    - name: server
+      nodePort: 31001
+      port: 8080
+      targetPort: 8080
+    - name: management
+      nodePort: 31002
+      port: 8081
+      targetPort: 8081
+  selector:
+    app: cloud-yysj-login-authentication
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: cloud-yysj-login-authentication
+  labels:
+    app: cloud-yysj-login-authentication
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: cloud-yysj-login-authentication
+  template:
+    metadata:
+      name: cloud-yysj-login-authentication
+      labels:
+        app: cloud-yysj-login-authentication
+    spec:
+      restartPolicy: Always
+      containers:
+      - name: service-provider
+        image: hub.i139.cn/cloud-yysj/cloud-yysj-login-authentication:1.0.0
+        imagePullPolicy: IfNotPresent
+        ports:
+        - name: server
+          containerPort: 8080
+        - name: management
+          containerPort: 8081
+        env:
+        - name: KUBERNETES_NAMESPACE
+          valueFrom:
+            fieldRef:
+              fieldPath: metadata.namespace
+        - name: POD_NAME
+          valueFrom:
+            fieldRef:
+              fieldPath: metadata.name
+        - name: JAVA_OPTS
+          value: ""
+        - name: APP_OPTS
+          value: ""
+        resources:
+          limits:
+            memory: 1000Mi
+            cpu: 2000m
+          requests:
+            memory: 256Mi
+            cpu: 1000m
+        readinessProbe:
+          initialDelaySeconds: 20
+          periodSeconds: 5
+          timeoutSeconds: 10
+          failureThreshold: 5
+          httpGet:
+            path: /actuator/health
+            port: 8081
+        livenessProbe:
+          initialDelaySeconds: 60
+          periodSeconds: 5
+          timeoutSeconds: 5
+          failureThreshold: 3
+          httpGet:
+            path: /actuator/health
+            port: 8081

+ 204 - 0
pom.xml

@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.2.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>info.aspirecn.cloud.yysj</groupId>
+    <artifactId>cloud-yysj-login-authentication</artifactId>
+    <version>1.0.0</version>
+    <name>cloud-yysj-login-authentication</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
+<!--        </dependency>-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
+            <version>3.2.7</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.47</version>
+        </dependency>
+        <!-- 配置jdbc依赖 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jdbc</artifactId>
+        </dependency>
+        <!-- mysql依赖 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <!-- mybatis依赖 -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+        <!--actuator-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <!--jwtTools-->
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.8.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20190722</version>
+        </dependency>
+        <!--xml->json-->
+        <dependency>
+            <groupId>net.sf.json-lib</groupId>
+            <artifactId>json-lib</artifactId>
+            <version>2.4</version>
+            <classifier>jdk15</classifier>
+        </dependency>
+        <dependency>
+            <groupId>xom</groupId>
+            <artifactId>xom</artifactId>
+            <version>1.2.5</version>
+        </dependency>
+        <!--		swagger2-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <!-- redis -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>info.aspirecn.iov.sjjh</groupId>
+            <artifactId>iov-sjjh-servicenode-user-interface</artifactId>
+            <version>1.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-web</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.cloud</groupId>
+                    <artifactId>spring-cloud-starter-openfeign</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.10</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <!--设置应用 Main 参数启动依赖查找的地址指向外部 lib 文件夹-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+            <!--设置 SpringBoot 打包插件不包含任何 Jar 依赖包-->
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>
+                            <groupId>nothing</groupId>
+                            <artifactId>nothing</artifactId>
+                        </include>
+                    </includes>
+                </configuration>
+            </plugin>
+            <!--设置将 lib 拷贝到应用 Jar 外面-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 17 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/Application.java

@@ -0,0 +1,17 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@SpringBootApplication
+@EnableFeignClients
+@EnableSwagger2
+public class Application {
+
+	public static void main(String[] args) {
+		SpringApplication.run(Application.class, args);
+	}
+
+}

+ 27 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/config/RedisConfig.java

@@ -0,0 +1,27 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * Redis 配置
+ */
+@Configuration
+public class RedisConfig {
+
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
+        redisTemplate.setConnectionFactory(redisConnectionFactory);
+        return redisTemplate;
+    }
+
+}

+ 80 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/config/RestTemplateConfig.java

@@ -0,0 +1,80 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.HttpClient;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.TrustStrategy;
+import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.web.client.DefaultResponseErrorHandler;
+import org.springframework.web.client.RestTemplate;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 配置 SpringBoot 自带的 HTTP 工具类 RestTemplate
+ */
+@Slf4j
+@Configuration
+public class RestTemplateConfig {
+
+    @Bean
+    public RestTemplate restTemplate() {
+        RestTemplate restTemplate = new RestTemplate();
+        restTemplate.setRequestFactory(clientHttpRequestFactory());
+        restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
+        return restTemplate;
+    }
+
+    @Bean
+    public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
+        try {
+            HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
+            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (arg0, arg1) -> true).build();
+            httpClientBuilder.setSSLContext(sslContext);
+            HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
+            SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
+            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
+                    .<ConnectionSocketFactory>create()
+                    .register("http", PlainConnectionSocketFactory.getSocketFactory())
+                    .register("https", sslConnectionSocketFactory).build();
+            // 开始设置连接池
+            PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(
+                    socketFactoryRegistry);
+            // 最大连接数2700
+            poolingHttpClientConnectionManager.setMaxTotal(2700);
+            // 同路由并发数100
+            poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100);
+            httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager);
+            // 重试次数
+            httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true));
+            HttpClient httpClient = httpClientBuilder.build();
+            // httpClient连接配置
+            HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
+            // 连接超时
+            clientHttpRequestFactory.setConnectTimeout(20000);
+            // 数据读取超时时间
+            clientHttpRequestFactory.setReadTimeout(30000);
+            // 连接不够用的等待时间
+            clientHttpRequestFactory.setConnectionRequestTimeout(20000);
+            return clientHttpRequestFactory;
+        } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
+            log.error("初始化HTTP连接池出错", e);
+        }
+        return null;
+    }
+
+}

+ 76 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/controller/YysjUserControllder.java

@@ -0,0 +1,76 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.controller;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.GetTokenRequest;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.TokenEntity;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.response.ResultResponse;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.enums.ResultEnum;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.ParamaterException;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.CheckTokenService;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.LoginTokenService;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.LogoutService;
+import io.swagger.annotations.*;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping
+@Api(tags = "云验平台登录接口")
+@ApiResponses({
+        @ApiResponse(code = 200, message = "请求成功"),
+        @ApiResponse(code = 400, message = "请求参数错误"),
+        @ApiResponse(code = 401, message = "请求token无效"),
+        @ApiResponse(code = 403, message = "请求token过期"),
+        @ApiResponse(code = 404, message = "请求地址没有发现"),
+        @ApiResponse(code = 500, message = "系统异常"),
+})
+public class YysjUserControllder {
+    @Autowired
+    private LoginTokenService loginTokenService;
+    @Value("${auth.token.expire}")
+    private Integer authTokenExpire;
+    @Autowired
+    private CheckTokenService checkTokenService;
+    @Autowired
+    private LogoutService logoutService;
+
+    @ApiOperation(value = "云验平台登录", notes = "云验平台登录接口。")
+
+    @PostMapping("/login")
+    public ResultResponse getTokenTest(@RequestBody GetTokenRequest getTokenRequest)throws Exception{
+        if(StringUtils.isEmpty(getTokenRequest.getUserId())||StringUtils.isEmpty(getTokenRequest.getPassword())){
+            throw new ParamaterException("请求参数为空");
+        }
+        ResultResponse resultResponse = new ResultResponse();
+        String token = loginTokenService.getLoginToken(getTokenRequest);
+        Map<String,String> map = new HashMap<>();
+        map.put("token",token);
+        resultResponse.setSuccess(ResultEnum.YYSJ_SUCCESS,map);
+        return resultResponse;
+    }
+
+    @ApiOperation(value = "token校验", notes = "token校验接口。")
+    @PostMapping("/check")
+    public ResultResponse checkToken(@RequestBody TokenEntity tokenEntity) {
+        if(StringUtils.isEmpty(tokenEntity.getToken())){
+            throw new ParamaterException("参数为空");
+        }
+        String userId = checkTokenService.checkToken(tokenEntity.getToken());
+        return new ResultResponse().setCode(200).setData(userId);
+    }
+
+    @ApiOperation(value = "云验平台退出接口", notes = "退出接口。")
+    @ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "userId", required = true, dataType = "String")})
+    @GetMapping("/logout")
+    public ResultResponse logout (@RequestHeader String userId){
+        if(StringUtils.isEmpty(userId)){
+            throw new ParamaterException("参数位空");
+        }
+        logoutService.logout(userId);
+        return new ResultResponse().setCode(200).setMessage("成功");
+    }
+
+}

+ 71 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/controller/exception/GlobalExceptionHandle.java

@@ -0,0 +1,71 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.controller.exception;
+
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import com.auth0.jwt.exceptions.TokenExpiredException;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.controller.YysjUserControllder;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.response.ResultResponse;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.enums.ResultEnum;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.client.HttpClientErrorException;
+import javax.servlet.http.HttpServletResponse;
+import java.net.SocketTimeoutException;
+
+@RestControllerAdvice(basePackageClasses = YysjUserControllder.class)
+@Slf4j
+public class GlobalExceptionHandle {
+    /**
+     * 自定义异常处理器
+     *
+     * @param response 响应对象
+     * @return ResponseInfo
+     */
+    @ExceptionHandler({RuntimeException.class})
+    public ResultResponse runtimeExceptionHandler(RuntimeException e, HttpServletResponse response) {
+        // 设置响应对象
+        ResultResponse resultResponse = new ResultResponse();
+        response.setStatus(HttpServletResponse.SC_OK);
+        if (e instanceof UserNotExistException) {
+            //用户名或密码错误
+            resultResponse.setCode(ResultEnum.YYSJ_NO_USER.getStatus())
+                          .setError(ResultEnum.YYSJ_NO_USER);
+        } else if (e instanceof SystemBusyException) {
+            resultResponse.setCode(ResultEnum.YYSJ_SYSTEM_BUSY.getStatus())
+                    .setError(ResultEnum.YYSJ_SYSTEM_BUSY);
+        } else if ((e instanceof TokenExpiredException) || (e instanceof TokenTimeoutException)) {
+            resultResponse.setCode(ResultEnum.YYSJ_REQUEST_TOKEN_OUTTIME.getStatus())
+                    .setError(ResultEnum.YYSJ_REQUEST_TOKEN_OUTTIME);
+        } else if (e instanceof JWTVerificationException) {
+            resultResponse.setCode(ResultEnum.YYSJ_REQUEST_TOKEN_ERROR.getStatus())
+                    .setError(ResultEnum.YYSJ_REQUEST_TOKEN_ERROR);
+        } else if (e instanceof LoginAgainException) {
+            resultResponse.setCode(ResultEnum.YYSJ_LOGIN_AGAIN.getStatus())
+                    .setError(ResultEnum.YYSJ_LOGIN_AGAIN);
+        } else if (e instanceof ParamaterException) {
+            resultResponse.setCode(ResultEnum.YYSJ_REQUEST_PARAMETER_ERROR.getStatus())
+                    .setError(ResultEnum.YYSJ_REQUEST_PARAMETER_ERROR);
+        }else {
+            resultResponse.setCode(ResultEnum.YYSJ_SYSTEM_ERROR.getStatus())
+                    .setError(ResultEnum.YYSJ_SYSTEM_ERROR);
+        }
+        log.error("", e);
+        return resultResponse;
+    }
+    /**
+     * 连接超时异常处理
+     *
+     * @param response 响应对象
+     * @return ResponseInfo
+     */
+    @ExceptionHandler({SocketTimeoutException.class, HttpClientErrorException.class})
+    public ResultResponse jWTDecodeExceptionHandler(Exception e, HttpServletResponse response) {
+        // 设置响应对象
+        ResultResponse resultResponse = new ResultResponse();
+        resultResponse.setCode(ResultEnum.YYSJ_SYSTEM_ERROR.getStatus()).
+                setError(ResultEnum.YYSJ_SYSTEM_ERROR);
+        return resultResponse;
+    }
+
+}

+ 67 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/database/YysjUser.java

@@ -0,0 +1,67 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.database;
+
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.ToString;
+import java.io.Serializable;
+import java.util.Date;
+
+
+@ToString
+@Data
+@TableName("yysj_user")
+public class YysjUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户id,一般是国家物流平台交换码
+     */
+    @TableField(value = "userId")
+    private String userId;
+
+    /**
+     * 访问数据交互网关的 appid
+     */
+    @TableField(value = "appId")
+    private String appId;
+
+    /**
+     * 访问数据交互网关的 secret
+     */
+    private String secret;
+
+    /**
+     * 国家物流平台注册时的用户名
+     */
+    private String username;
+
+    /**
+     * 数据交互创建用户的id
+     */
+    @TableField(value="sjjhUserId")
+    private Integer sjjhUserId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "createTime", fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "updateTime", fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    public YysjUser() {
+    }
+
+}

+ 13 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/database/sjjh_entity/Result.java

@@ -0,0 +1,13 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.database.sjjh_entity;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class Result {
+
+        private String code;
+        private String message;
+        private Object result;
+}

+ 22 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/GetTokenRequest.java

@@ -0,0 +1,22 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class GetTokenRequest {
+    /**
+     *用户名称
+     */
+    @ApiModelProperty(value = "用户名称")
+    private String userId;
+    /**
+     * 用户密码
+     */
+    @ApiModelProperty(value = "密码")
+    private String password;
+
+
+}

+ 13 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/TokenEntity.java

@@ -0,0 +1,13 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class TokenEntity {
+    /**
+     * token
+     */
+    private String token;
+}

+ 122 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/sjjh/CustomerInfo.java

@@ -0,0 +1,122 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+@ApiModel(
+        description = "客户model"
+)
+@Data
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+public class CustomerInfo {
+    @ApiModelProperty(
+            name = "客户sid"
+    )
+    private String sid;
+    @ApiModelProperty(
+            name = "客户userId"
+    )
+    private Integer id;
+    @ApiModelProperty(
+            name = "客户id"
+    )
+    private String customerId;
+    @ApiModelProperty(
+            name = "appid"
+    )
+    private String appId;
+    @ApiModelProperty(
+            name = "客户id"
+    )
+    private String secret;
+    @ApiModelProperty(
+            name = "企业名称"
+    )
+    private String enterpriseName;
+    @ApiModelProperty(
+            name = "统一信用代码"
+    )
+    private String socialCode;
+    @ApiModelProperty(
+            name = "法人代表"
+    )
+    private String legalperson;
+    @ApiModelProperty(
+            name = "联系人"
+    )
+    private String contactPerson;
+    @ApiModelProperty(
+            name = "联系手机"
+    )
+    private String contactPhone;
+    @ApiModelProperty(
+            name = "客户email"
+    )
+    private String customerEmail;
+    @ApiModelProperty(
+            name = "营业执照"
+    )
+    private String license;
+    @ApiModelProperty(
+            name = "营业执照名称"
+    )
+    private String licenseName;
+    @ApiModelProperty(
+            name = "发票信息_企业名称"
+    )
+    private String invoiceEnterpriseName;
+    @ApiModelProperty(
+            name = "发票信息_纳税识别号"
+    )
+    private String invoiceTaxNo;
+    @ApiModelProperty(
+            name = "发票信息_企业地址"
+    )
+    private String invoiceAddress;
+    @ApiModelProperty(
+            name = "发票信息_开户银行"
+    )
+    private String invoiceBank;
+    @ApiModelProperty(
+            name = "发票信息_账号"
+    )
+    private String invoiceAccount;
+    @ApiModelProperty(
+            name = "发票信息_电话"
+    )
+    private String invoicePhone;
+    @ApiModelProperty(
+            name = "发票信息_一般纳锐人证明"
+    )
+    private String invoiceTaxPayer;
+    @ApiModelProperty(
+            name = "发票信息_一般纳锐人证明文件名称"
+    )
+    private String invoiceTaxPayerName;
+    @ApiModelProperty(
+            name = "余额预警"
+    )
+    private String invoiceBalanceWarn;
+    @ApiModelProperty(
+            name = "余额预警接收人-手机号码"
+    )
+    private String invoiceWarnPersionPhone;
+    @ApiModelProperty(
+            name = "日调用量提醒开启 1:开启 ,0:关闭"
+    )
+    private String invoiceDayCountWarn;
+    @ApiModelProperty("客户来源")
+    private Integer customerSource;
+    @ApiModelProperty("客户调用ip")
+    private String customerIp;
+    @ApiModelProperty(
+            name = "客户状态"
+    )
+    private Integer status;
+}

+ 15 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/sjjh/User.java

@@ -0,0 +1,15 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+@Data
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class User {
+    private int id;
+    private int status;
+}

+ 30 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/request/sjjh/UserAccountRes.java

@@ -0,0 +1,30 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.util.Date;
+
+@Data
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "用户账户")
+public class UserAccountRes {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("用户id")
+    private Integer userId;
+    @ApiModelProperty("余额")
+    private Long balance;
+    @ApiModelProperty("创建时间")
+    private Date createtime;
+    @ApiModelProperty("最近更新时间")
+    private Date updatetime;
+
+}
+

+ 37 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/entity/response/ResultResponse.java

@@ -0,0 +1,37 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.entity.response;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.enums.ResultEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+@Data
+@ToString
+@Accessors(chain = true)
+public class ResultResponse {
+
+    /**状态码描述信息 */
+    @ApiModelProperty(value = "响应信息")
+    private String message ="";
+
+    /** 返回数据信息*/
+    @ApiModelProperty(value = "响应数据")
+    private Object data = "";
+
+    /** 返回数据信息*/
+    @ApiModelProperty(value = "错误码")
+    private Integer code=200;
+
+    public void setError(ResultEnum resultEnum) {
+
+        this.message = resultEnum.getMessage();
+
+    }
+
+    public void setSuccess(ResultEnum resultEnum, Object data) {
+
+        this.message = resultEnum.getMessage();
+        this.data = data;
+    }
+}

+ 18 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/enums/MPEnum.java

@@ -0,0 +1,18 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.enums;
+
+public enum MPEnum {
+    /**
+     *
+     */
+    SJJH_CREAT_USER_SECUESS("1000"),
+    PLATFORM_GET_USER_INFO_SECUESS("300000")
+    ;
+    private String code;
+
+    MPEnum(String code) {
+        this.code=code;
+    }
+    public String getCode() {
+        return code;
+    }
+}

+ 33 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/enums/ResultEnum.java

@@ -0,0 +1,33 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.enums;
+
+public enum ResultEnum {
+    /**
+     * 查询成功
+     */
+    YYSJ_SUCCESS( 200, "请求成功"),
+    YYSJ_REQUEST_PARAMETER_ERROR(400,"请求参数错误"),
+    YYSJ_NO_USER(400,"用户名或密码错误"),
+    YYSJ_REQUEST_TOKEN_ERROR(401,"请求token无效"),
+    YYSJ_REQUEST_TOKEN_OUTTIME(403,"请求token过期"),
+    YYSJ_LOGIN_AGAIN(403,"请先登录"),
+    YYSJ_SYSTEM_ERROR(500,"系统异常"),
+    YYSJ_SYSTEM_BUSY(504,"系统繁忙,请稍后再试")
+    ;
+
+    private Integer status;
+    private String message;
+
+    ResultEnum(Integer status, String message) {
+        this.status = status;
+        this.message = message;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+}

+ 26 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/LoginAgainException.java

@@ -0,0 +1,26 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions;
+
+/**
+ * 需要重新登录异常
+ */
+public class LoginAgainException extends RuntimeException {
+    public LoginAgainException() {
+        super();
+    }
+
+    public LoginAgainException(String message) {
+        super(message);
+    }
+
+    public LoginAgainException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public LoginAgainException(Throwable cause) {
+        super(cause);
+    }
+
+    protected LoginAgainException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 26 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/ParamaterException.java

@@ -0,0 +1,26 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions;
+
+/**
+ *参数异常
+ */
+public class ParamaterException extends RuntimeException{
+    public ParamaterException() {
+        super();
+    }
+
+    public ParamaterException(String message) {
+        super(message);
+    }
+
+    public ParamaterException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public ParamaterException(Throwable cause) {
+        super(cause);
+    }
+
+    protected ParamaterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 27 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/SystemBusyException.java

@@ -0,0 +1,27 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions;
+
+/**
+ * 系统繁忙异常
+ */
+public class SystemBusyException extends RuntimeException{
+    public SystemBusyException() {
+        super();
+    }
+
+    public SystemBusyException(String message) {
+        super(message);
+    }
+
+    public SystemBusyException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public SystemBusyException(Throwable cause) {
+        super(cause);
+    }
+
+    protected SystemBusyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+
+}

+ 27 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/TokenAuthenticationFailure.java

@@ -0,0 +1,27 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions;
+
+/**
+ * @author dingliqiang
+ */
+public class TokenAuthenticationFailure extends RuntimeException{
+
+    public TokenAuthenticationFailure() {
+        super();
+    }
+
+    public TokenAuthenticationFailure(String message) {
+        super(message);
+    }
+
+    public TokenAuthenticationFailure(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public TokenAuthenticationFailure(Throwable cause) {
+        super(cause);
+    }
+
+    protected TokenAuthenticationFailure(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 26 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/TokenTimeoutException.java

@@ -0,0 +1,26 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions;
+
+/**
+ * token过期异常
+ */
+public class TokenTimeoutException extends RuntimeException{
+    public TokenTimeoutException() {
+        super();
+    }
+
+    public TokenTimeoutException(String message) {
+        super(message);
+    }
+
+    public TokenTimeoutException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public TokenTimeoutException(Throwable cause) {
+        super(cause);
+    }
+
+    protected TokenTimeoutException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 28 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/exceptions/UserNotExistException.java

@@ -0,0 +1,28 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions;
+
+/**
+ * 用户不存在的异常
+ */
+public class UserNotExistException extends RuntimeException {
+
+    public UserNotExistException() {
+        super();
+    }
+
+    public UserNotExistException(String message) {
+        super(message);
+    }
+
+    public UserNotExistException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public UserNotExistException(Throwable cause) {
+        super(cause);
+    }
+
+    protected UserNotExistException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+
+}

+ 18 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/mapper/YysjUserMapper.java

@@ -0,0 +1,18 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.database.YysjUser;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *  yysj_user
+ * @author cy
+ */
+@Repository
+@Mapper
+public interface YysjUserMapper extends BaseMapper<YysjUser> {
+
+
+
+}

+ 12 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/CheckTokenService.java

@@ -0,0 +1,12 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.TokenEntity;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.response.ResultResponse;
+
+
+public interface CheckTokenService {
+    /**
+     * token校验接口
+     */
+    String checkToken(String token);
+}

+ 57 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/CreatUserService.java

@@ -0,0 +1,57 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.database.sjjh_entity.Result;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh.CustomerInfo;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh.User;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import java.util.Map;
+@FeignClient(value = "${yysj.sjjh.info.creatUserService.feignValue}",url = "${yysj.sjjh.info.creatUserService.feignUrl}")
+public interface CreatUserService  {
+    /**
+     * 数据交互中新增客户
+     * @param customerInfo
+     * @return
+     */
+    @RequestMapping(value = "customerInfoAdd.do", method = {RequestMethod.POST})
+    Result customerInfoAdd(@RequestBody CustomerInfo customerInfo);
+
+    /**
+     * 获取客户名称列表
+     * @param customerName 客户名称
+     * @param customerId 客户id
+     * @param pageNum  每页条数
+     * @param pageSize 页码
+     * @return 客户名称列表
+     */
+     @RequestMapping(value = "getCustomerName.do", method = {RequestMethod.POST})
+     Result getCustomerName(@RequestParam(value = "customerName",required = false) String customerName,
+                                  @RequestParam(value = "customerId",required = false) String customerId,
+                                  @RequestParam(value = "pageNum", required = true) Integer pageNum,
+                                  @RequestParam(value = "pageSize", required = true) Integer pageSize);
+
+    /**
+     * 获取客户信息  appId以及secret
+     * @param sid
+     * @return
+     */
+    @RequestMapping(value = "customerInfo.do", method = {RequestMethod.POST})
+     Result customerInfo(@RequestParam(value = "sid", required = true) String sid);
+
+    /**
+     * 数据交互查询用户信息
+     * @param customName 客户姓名
+     * @return Map 客户信息
+     */
+    @RequestMapping(value = "queryAppByCustomName.do", method = {RequestMethod.POST})
+    Map<String,String> queryAppByCustomName(@RequestParam(name = "customName", required = true) String  customName);
+
+    @RequestMapping(value = "queryUser.do", method = {RequestMethod.POST})
+    User getUserInfo(@RequestParam(name = "appId", required = true) String appId, @RequestParam(name = "appsecret", required = true) String appsecret);
+
+
+
+}

+ 13 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/LoginTokenService.java

@@ -0,0 +1,13 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.GetTokenRequest;
+
+public interface LoginTokenService {
+    /**
+     * 获取token接口
+     * @param getTokenRequest
+     * @return String
+     * @throws Exception
+     */
+    String getLoginToken(GetTokenRequest getTokenRequest) throws Exception;
+}

+ 10 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/LogoutService.java

@@ -0,0 +1,10 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service;
+
+public interface LogoutService {
+    /**
+     * 退出接口
+     * @param userId
+     * @return
+     */
+    void logout(String userId);
+}

+ 28 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/SjjhOrderService.java

@@ -0,0 +1,28 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh.UserAccountRes;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(value = "${yysj.sjjh.info.sjjhOrderService.feignValue}",url = "${yysj.sjjh.info.sjjhOrderService.feignUrl}")
+public interface SjjhOrderService {
+    /**
+     * 数据交互充值表创建用户
+     * @param userId    数据交互的id
+     * @param balance
+     * @return
+     */
+    @RequestMapping(value = "/addAccountForNewUser.do",method = RequestMethod.POST)
+    Boolean addAccountForNewUser(@RequestParam("userId") Integer userId,
+                                 @RequestParam("balance") Long balance);
+
+    /**
+     * 查询数据交互充值表信息
+     * @param userId 根据用户nid
+     * @return
+     */
+    @RequestMapping(value = "/getUserAccount.do",method = RequestMethod.GET)
+    UserAccountRes getUserAccount(@RequestParam("userId") Integer userId);
+}

+ 44 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/impl/CheckTokenServiceImpl.java

@@ -0,0 +1,44 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service.impl;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.response.ResultResponse;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.enums.ResultEnum;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.LoginAgainException;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.TokenTimeoutException;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.CheckTokenService;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.utils.JwtUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class CheckTokenServiceImpl implements CheckTokenService {
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+    @Value(("${yysj.redis.prefix}"))
+    private String prefix;
+
+    @Override
+    public String checkToken(String token) {
+        ResultResponse resultResponse = new ResultResponse();
+        // 验证 Token 是否正确
+        Map map = JwtUtils.verifyToken(token);
+        String uid = String.valueOf(map.get("userid"));
+        //如果redis里没有缓存则提示重新登陆
+        String key = prefix + uid;
+        Object object = redisTemplate.opsForValue().get(key);
+        if(object==null){
+            throw new LoginAgainException();
+        }
+        if(!String.valueOf(object).equals(token)){
+            throw new TokenTimeoutException("请求token错误");
+        }
+        //更新redis缓存时间
+        redisTemplate.expire(key, 30, TimeUnit.MINUTES);
+        resultResponse.setSuccess(ResultEnum.YYSJ_SUCCESS, uid);
+        return uid;
+    }
+
+}

+ 280 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/impl/LoginTokenServiceImpl.java

@@ -0,0 +1,280 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.database.sjjh_entity.Result;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh.CustomerInfo;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh.User;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.sjjh.UserAccountRes;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.enums.MPEnum;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.SjjhOrderService;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.utils.SslUtils;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.database.YysjUser;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.entity.request.GetTokenRequest;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.SystemBusyException;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.UserNotExistException;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.mapper.YysjUserMapper;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.CreatUserService;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.LoginTokenService;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.utils.JwtUtils;
+import net.sf.json.JSONObject;
+import net.sf.json.xml.XMLSerializer;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 获取token
+ *
+ * @author CY
+ * return 加密的token
+ */
+@Service
+
+public class LoginTokenServiceImpl implements LoginTokenService {
+    public static final String NO_VALUE = "null";
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private YysjUserMapper yysjUserMapper;
+
+    @Autowired
+    private CreatUserService creatUserService;
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Autowired
+    private SjjhOrderService sjjhOrderService;
+    @Value("${auth.token.expire}")
+    private Integer authTokenExpire;
+    @Value("${yysj.logisticsPlatform.tokenUrl}")
+    private String logisticsPlatformTokenUrl;
+
+    /**
+     * 用户需要访问的服务资源的id
+     */
+
+    @Value("${yysj.logisticsPlatform.resource}")
+    private String resource;
+
+    @Value("${yysj.logisticsPlatform.userInfoUrl}")
+    private String userInfoUrl;
+
+    @Value("${yysj.sjjh.info.contactPerson}")
+    private String contactPerson;
+
+    @Value("${yysj.sjjh.info.contactPhone}")
+    private String contactPhone;
+
+    @Value("${yysj.sjjh.info.customerSource}")
+    private Integer customerSource;
+
+    @Value(("${yysj.redis.prefix}"))
+    private String prefix;
+
+
+    /**
+     * 获取token
+     *
+     * @param getTokenRequest 用户信息实体类
+     * @return 用户id、申请人的令牌
+     * @throws Exception 忽略https证书抛出的异常
+     */
+    @Override
+    public String getLoginToken(GetTokenRequest getTokenRequest) throws Exception {
+        //国家物流平台验证用户是否存在
+        String token = getTokenFromPlatform(getTokenRequest.getUserId(), getTokenRequest.getPassword());
+        //判断token是否有值,没值代表用户名密码远端验证不通过
+        if (NO_VALUE.equals(token)) {
+            throw new UserNotExistException("用户不存在");
+        }
+        //查询本地库是否有用户信息
+        int count = yysjUserMapper.selectCount((new QueryWrapper<YysjUser>().eq("userId", getTokenRequest.getUserId())));
+        //如果本地库不存在
+        if (count == 0) {
+            //去出数据交互创建用户,并获取appId和secret放在map中
+            Map<String, Object> sjjhUserInfoLists = userInfoFromSjjh(getTokenRequest.getUserId());
+            //去国家物流平台获取用户信息得到username
+            String username = userInfoFromLogisticsPlatform(getTokenRequest.getUserId(), token);
+            //将数据加载到本地库实体类中
+            YysjUser user = new YysjUser();
+            user.setUserId(getTokenRequest.getUserId());
+            user.setAppId(String.valueOf(sjjhUserInfoLists.get("appId")));
+            user.setSecret(String.valueOf(sjjhUserInfoLists.get("secret")));
+            user.setSjjhUserId(Integer.parseInt(String.valueOf(sjjhUserInfoLists.get("sjjhUserId"))));
+            user.setUsername(username);
+            //将数据存到到本地库
+            yysjUserMapper.insert(user);
+        }
+        //将userid通过jwt加密成token
+        String userId = getTokenRequest.getUserId();
+        String tokens;
+        tokens = encipherUserId(userId);
+        //将用户名存在redis中
+        String key = prefix + userId;
+        redisTemplate.opsForValue().set(key, tokens, 30, TimeUnit.MINUTES);
+        return tokens;
+    }
+
+    /**
+     * 国家物流平台获取token
+     *
+     * @param userId   用户名
+     * @param password 密码
+     * @return token
+     * @throws Exception 忽略证书抛出的异常
+     */
+    private String getTokenFromPlatform(String userId, String password) throws Exception {
+        //忽略证书
+        SslUtils.ignoreSsl();
+        /* 从国家物流平台获取token的请求参数列表 */
+        Map<String, String> params = new HashMap<>();
+        //添加参数
+        params.put("userid", userId);
+        params.put("password", password);
+        params.put("resource", resource);
+        //调接口获取数据
+        String remoteResult = restTemplate.getForEntity(logisticsPlatformTokenUrl, String.class, params).getBody();
+        if (StringUtils.isEmpty(remoteResult)) {
+            throw new SystemBusyException("国家物流平台验证token失败");
+        }
+        //将xml字符串转为json
+        JSONObject result = JSONObject.fromObject(remoteResult);
+        //获取json串中token字段
+        return result.get("token").toString();
+    }
+
+
+    /**
+     * 将用户名加密生成token
+     *
+     * @param userid 用户名
+     * @return token
+     */
+    private String encipherUserId(String userid) {
+        // 设置 Token 中的存的内容
+        Map<String, String> claim = new HashMap<>();
+        claim.put("userid", userid);
+        // 创建 Token,设置 60 分钟过期
+        String token = JwtUtils.createToken(claim, authTokenExpire);
+        return token;
+    }
+
+    /**
+     * 到数据交互平台创建客户,并获取appId,secret
+     *
+     * @return appId和secret
+     */
+    private Map<String, Object> userInfoFromSjjh(String userId) {
+        //查找数据交互平台是否有该用户
+        Map<String, String> infoFromSjjh = creatUserService.queryAppByCustomName(userId);
+        CustomerInfo customerInfo = new CustomerInfo();
+        Integer sjjhUserId=null;
+        if (infoFromSjjh.size() == 0 || infoFromSjjh.isEmpty()) {
+            customerInfo.setEnterpriseName(userId);
+            customerInfo.setContactPerson(contactPerson);
+            customerInfo.setContactPhone(contactPhone);
+            customerInfo.setCustomerSource(customerSource);
+            Result result = creatUserService.customerInfoAdd(customerInfo);
+            String code = result.getCode();
+            if (!MPEnum.SJJH_CREAT_USER_SECUESS.getCode().equals(code)) {
+                throw new SystemBusyException("数据交互创建用户失败");
+            }
+            //数据交互平台获取用户信息
+            infoFromSjjh = creatUserService.queryAppByCustomName(userId);
+        }
+        String appId = infoFromSjjh.get("appId");
+        String secret = infoFromSjjh.get("secret");
+        //数据交互根据appId和secret查询用户id
+        User user = creatUserService.getUserInfo(appId,secret);
+        sjjhUserId = user.getId();
+        //去数据交互充值库查用户
+        UserAccountRes userAccountRes = sjjhOrderService.getUserAccount(sjjhUserId);
+        //如果没有这个用户则插入一条数据
+        if(userAccountRes.getUserId()==null){
+            boolean addUser = sjjhOrderService.addAccountForNewUser(sjjhUserId, (long) 0);
+            if(addUser==false){
+                throw new SystemBusyException("数据交互充值表插入数据失败");
+            }
+        }
+        //获取appId和secret和userId
+        Map<String, Object> sjjhUserInfoLists = new HashMap<>();
+        sjjhUserInfoLists.put("appId",appId);
+        sjjhUserInfoLists.put("secret",secret);
+        sjjhUserInfoLists.put("sjjhUserId",sjjhUserId);
+        return sjjhUserInfoLists;
+    }
+
+    /**
+     * 获取国家物流平台用户信息
+     *
+     * @return 返回物流平台用户信息
+     * @throws Exception 忽略证书时抛出异常
+     */
+    private String userInfoFromLogisticsPlatform(String userId, String token) throws Exception {
+        //忽略证书
+        SslUtils.ignoreSsl();
+        //创建消息头
+        HttpHeaders requestHeader = new HttpHeaders();
+        //添加xml类型消息头
+        requestHeader.setContentType(MediaType.APPLICATION_XML);
+        StringBuffer xmlString = new StringBuffer();
+        //拼接请求body
+        xmlString.append("<?xml version=\"1.0\" encoding=\"utf-16\"?>")
+                .append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">")
+                .append("<soap:Body>")
+                .append("<userGeneralQuery xmlns=\"http://client.ws.logink.org/SearchService\">")
+                .append("<applicantToken xmlns=\"\">" + token + "</applicantToken>")
+                .append(" <username xmlns=\"\"></username>")
+                .append("  <userid xmlns=\"\">" + userId + "</userid>\"")
+                .append(" </userGeneralQuery>")
+                .append(" </soap:Body>")
+                .append("</soap:Envelope>");
+        // 创建 HttpEntity
+        HttpEntity<String> requestEntity = new HttpEntity<>(xmlString.toString(), requestHeader);
+        //发送请求
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(userInfoUrl, requestEntity, String.class);
+        /* 获取返回的xml格式body的字符串 */
+        String xmlbody = responseEntity.getBody();
+        return convert(xmlbody);
+    }
+
+    /**
+     * 提取国家物流平台用户信息的用户名字段
+     *
+     * @param xmlbody 物流平台返回的xml格式的信息
+     * @return String
+     */
+    private static String convert(String xmlbody) {
+        //将xml字符串转换为json格式
+        XMLSerializer xmlSerializer = new XMLSerializer();
+        String resutStr = xmlSerializer.read(xmlbody).toString();
+        JSONObject result = JSONObject.fromObject(resutStr);
+        //拆开json串 获取需要的数据
+        JSONObject resultInfo;
+        resultInfo = result.getJSONObject("soap:Body")
+                .getJSONObject("ns2:userGeneralQueryResponse")
+                .getJSONObject("SearchResult");
+        //获取返回状态码
+        String code = resultInfo.get("resultCode").toString();
+        //判断状态码如果不是300000则抛出异常
+        if (!MPEnum.PLATFORM_GET_USER_INFO_SECUESS.getCode().equals(code)) {
+            throw new SystemBusyException("国家物流平台获取用户信息失败");
+        }
+        //拆分第二层
+        JSONObject searchResultList = resultInfo.getJSONArray("searchResult").getJSONObject(0);
+        return searchResultList.get("cn").toString();
+    }
+
+}

+ 23 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/service/impl/LogoutServiceImpl.java

@@ -0,0 +1,23 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.service.impl;
+
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.SystemBusyException;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.service.LogoutService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LogoutServiceImpl implements LogoutService {
+    @Value(("${yysj.redis.prefix}"))
+    private String prefix;
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+    @Override
+    public void logout(String userId) {
+        redisTemplate.delete(prefix+userId);
+        if(redisTemplate.opsForValue().get(prefix+userId)!=null){
+            throw new SystemBusyException("redis清空失败");
+        }
+    }
+}

+ 76 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/utils/JwtUtils.java

@@ -0,0 +1,76 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.utils;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTCreator;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.interfaces.Claim;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import com.auth0.jwt.interfaces.JWTVerifier;
+import info.aspirecn.cloud.yysj.cloudyysjlogin.exceptions.SystemBusyException;
+import org.omg.CORBA.SystemException;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+public class JwtUtils {
+
+    private JwtUtils() {
+    }
+
+    /**
+     * 签名的私钥
+     */
+    private static final String SECRET = "9a96349e2345385785e804e0f4254dee";
+    /**
+     * 签发人
+     */
+    private static final String ISSUER = "SYS_USER";
+
+    /**
+     * 生成token
+     *
+     * @param claims 加密内容
+     * @param time   过期时间,单位(s)
+     * @return Token字符串
+     */
+    public static String createToken(Map<String, String> claims, long time) {
+        try {
+            // 设置过期时间
+            Date expireDate = new Date();
+            expireDate.setTime(expireDate.getTime() + time * 1000);
+            //使用HMAC256进行加密
+            Algorithm algorithm = Algorithm.HMAC256(SECRET);
+            //创建jwt
+            JWTCreator.Builder builder = JWT.create()
+                    .withIssuer(ISSUER).
+                            withExpiresAt(expireDate);
+            //传入参数
+            claims.forEach(builder::withClaim);
+            //签名加密
+            return builder.sign(algorithm);
+        } catch (IllegalArgumentException e) {
+            throw new SystemBusyException("创建token异常");
+        }
+    }
+
+    /**
+     * 解密jwt
+     *
+     * @param token 加密串
+     * @return jwt 负载信息
+     */
+    public static Map<String, String> verifyToken(String token) {
+        Algorithm algorithm = null;
+        //使用HMAC256进行加密
+        algorithm = Algorithm.HMAC256(SECRET);
+        //解密
+        JWTVerifier verifier = JWT.require(algorithm).withIssuer(ISSUER).build();
+        DecodedJWT jwt = verifier.verify(token);
+        Map<String, Claim> map = jwt.getClaims();
+        Map<String, String> resultMap = new HashMap<>();
+        map.forEach((k, v) -> resultMap.put(k, v.asString()));
+        return resultMap;
+    }
+
+}

+ 39 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/utils/MetaHandler.java

@@ -0,0 +1,39 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.utils;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import org.apache.ibatis.reflection.MetaObject;
+import org.mybatis.logging.Logger;
+import org.mybatis.logging.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
+ */
+@Component
+class MetaHandler implements MetaObjectHandler {
+
+    private static final Logger logger = LoggerFactory.getLogger(MetaHandler.class);
+
+    /**
+     * 新增数据执行
+     * @param metaObject
+     */
+    @Override
+    public void insertFill(MetaObject metaObject) {
+
+        this.setFieldValByName("createTime", new Date(), metaObject);
+        this.setFieldValByName("updateTime", new Date(), metaObject);
+    }
+
+    /**
+     * 更新数据执行
+     * @param metaObject
+     */
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        this.setFieldValByName("updateTime", new Date(), metaObject);
+    }
+
+}

+ 68 - 0
src/main/java/info/aspirecn/cloud/yysj/cloudyysjlogin/utils/SslUtils.java

@@ -0,0 +1,68 @@
+package info.aspirecn.cloud.yysj.cloudyysjlogin.utils;
+
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+ 
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+/**
+ * 忽略https证书
+ */
+public class SslUtils {
+ 
+    private static void trustAllHttpsCertificates() throws Exception {
+        TrustManager[] trustAllCerts = new TrustManager[1];
+        TrustManager tm = new MiTm();
+        trustAllCerts[0] = tm;
+        SSLContext sc = SSLContext.getInstance("SSL");
+        sc.init(null, trustAllCerts, null);
+        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+    }
+ 
+    static class MiTm implements TrustManager,X509TrustManager {
+        @Override
+        public X509Certificate[] getAcceptedIssuers() {
+            return null;
+        }
+ 
+        public boolean isServerTrusted(X509Certificate[] certs) {
+            return true;
+        }
+ 
+        public boolean isClientTrusted(X509Certificate[] certs) {
+            return true;
+        }
+ 
+        @Override
+        public void checkServerTrusted(X509Certificate[] certs, String authType)
+                throws CertificateException {
+            return;
+        }
+ 
+        @Override
+        public void checkClientTrusted(X509Certificate[] certs, String authType)
+                throws CertificateException {
+            return;
+        }
+    }
+     
+    /**
+     * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
+     * @throws Exception
+     */
+    public static void ignoreSsl() throws Exception{
+        HostnameVerifier hv = new HostnameVerifier() {
+            @Override
+            public boolean verify(String urlHostName, SSLSession session) {
+                return true;
+            }
+        };
+        trustAllHttpsCertificates();
+        HttpsURLConnection.setDefaultHostnameVerifier(hv);
+    }
+}

+ 68 - 0
src/main/resources/application.yml

@@ -0,0 +1,68 @@
+##mysql configuration
+#spring:
+#  datasource:
+#    username: root
+#    url: jdbc:mysql://10.8.17.119:32196/cloud-yysj?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+#    driver-class-name: com.mysql.cj.jdbc.Driver
+#    type: com.zaxxer.hikari.HikariDataSource
+#    hikari:
+#      minimum-idle: 5
+#      maximum-pool-size: 15
+#      auto-commit: true
+#      idle-timeout: 30000
+#      pool-name: DatebookHikariCP
+#      max-lifetime: 1800000
+#      connection-timeout: 30000
+#      password: 123456
+#  redis:
+#    host: 10.8.17.119
+#    port: 32042
+#    database: 3
+#    timeout: 1000
+#    password:
+#    lettuce:
+#      pool:
+#        max-active: 20
+#        max-wait: -1
+#        min-idle: 0
+#        max-idle: 10
+##jwt token expiration time
+#auth:
+#  token:
+#    expire: 3600
+#mybatis:
+#  configuration:
+#    map-underscore-to-camel-case: true
+#
+##  monitor
+#management:
+#  server:
+#    port: 8081
+#  endpoint:
+#    health:
+#      show-details: always
+#  endpoints:
+#    enabled-by-default: true
+#    web:
+#      exposure:
+#        include: "*"
+#yysj:
+#  logisticsPlatform:
+#    tokenUrl: https://ssl.logink.cn/authapi/rest/auth/apply?userid={userid}&password={password}&resource={resource}
+#    userInfoUrl: https://auth.logink.cn/AuthenticationService/SearchService?wsdl
+#    resource : 0ACA7C6BA38E0008E053C0A87F0B0008
+#  redis:
+#    prefix: "YYSJ_USER:"
+#  sjjh:
+#    info:
+#      contactPerson: yysj
+#      contactPhone: 13811426441
+#      customerSource: 0
+#      creatUserService:
+#        feignValue: "http://iov-sjjh-servicenode-user.iov-sjjh:8080"
+#        feignUrl: "http://10.8.18.171:20011"
+#      sjjhOrderService:
+#        feignValue: "http://iov-sjjh-servicenode-order.iov-sjjh:8080"
+#        feignUrl: "http://10.8.18.171:20181/"
+#
+#

+ 38 - 0
src/main/resources/bootstrap.yml

@@ -0,0 +1,38 @@
+#ConfigMap 配置参数
+server:
+  port: 8080
+spring:
+  application:
+    name: cloud-yysj-login-authentication
+  cloud:
+    kubernetes:
+      reload:
+        enabled: true
+        mode: polling
+        period: 10000
+        strategy: refresh
+        monitoring-secrets: true
+      config:
+        enabled: true
+        enableApi: true
+        sources:
+          - namespace: cloud-yysj
+            name: ${spring.application.name}
+
+#监控配置参数
+management:
+  server:
+    port: 8081
+  endpoint:
+    restart:
+      enabled: true
+    health:
+      show-details: always
+  endpoints:
+    enabled-by-default: true
+    web:
+      exposure:
+        include: "*"
+info:
+  name: 登录,退出,token校验服务
+  version: 1.0.0