假设系统A是由若依管理系统进行的二次开发,保留了若依的用户、权限、角色管理功能,第三方系统B想要调我们的系统A的接口,就得先集成我们的SDK,这样就可以通过我们系统A的权限、角色校验,从而完成接口调用

一 开发若依SDK工具包

新建一个springboot项目(4.x版本),去掉启动类

pom.xml如下

<?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>

    <groupId>com.ultrahd</groupId>
    <artifactId>ultrahdCommonUtils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ultrahdCommonUtils</name>
    <description>ultrahdCommonUtils</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>4.0.3</version>
        </dependency>


        
        <!-- OkHttp 依赖 -->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.12.0</version>
        </dependency>
        
        <!-- JSON 依赖 -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20231013</version>
        </dependency>
    </dependencies>

    <build>
       
    </build>

</project>

新建sdk工具类GetTokenService

package com.ultrahd.ultrahdcommonutils.service;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;

/**
 * 获取token串
 */
@Service
public class GetTokenService {
    @Value("${app.url}")
    private String baseUrl;
    @Value("${app.username}")
    private String username;
    @Value("${app.password}")
    private String password;

    private String token;

    public String getToken() {
        OkHttpClient client = new OkHttpClient();

        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType,
                "{\"username\":\"" + username + "\",\"password\":\"" + password + "\",\"code\":\"\",\"uuid\":\"\"}");

        Request request = new Request.Builder()
                .url(baseUrl + "/login")
                .post(body)
                .addHeader("Content-Type", "application/json")
                .build();

        try {
            System.out.println("发送登录请求到:" + baseUrl + "/login");
            System.out.println("请求体:{\"username\":\"" + username + "\",\"password\":\"[已隐藏]\",\"code\":\"\",\"uuid\":\"\"}");
            
            Response response = client.newCall(request).execute();
            String responseBody = response.body().string();
            
            System.out.println("响应状态码:" + response.code());
            System.out.println("响应内容:" + responseBody);
            
            if (response.isSuccessful()) {
                try {
                    JSONObject json = new JSONObject(responseBody);
                    if (json.has("token")) {
                        token = json.getString("token");
                        System.out.println("登录成功,获取到token:" + token);
                    } else {
                        System.out.println("登录成功,但响应中没有token字段");
                    }
                } catch (JSONException e) {
                    System.out.println("JSON解析异常:" + e.getMessage());
                }
            } else {
                System.out.println("登录失败:" + responseBody);
            }
        } catch (IOException e) {
            System.out.println("请求异常:" + e.getMessage());
        }
        return token;
    }
}

新建配置类UltrahdCommonUtilsAutoConfiguration

package com.ultrahd.ultrahdcommonutils.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.ultrahd.ultrahdcommonutils") // 指定要扫描的包
public class UltrahdCommonUtilsAutoConfiguration {
}

在applicatio.yml里配置如下

app:
  url: http://localhost:8080  # 系统A的部署地址
  username: admin123  # 系统A的用户名(可以先随便写,不写真实用户名密码也没事,但是必须有这个配置项)
  password: admin12345  # 系统A的密码

在resource目录下新建META-INF.spring文件夹,在该文件夹下新建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,内容如下

com.ultrahd.ultrahdcommonutils.config.UltrahdCommonUtilsAutoConfiguration

打包为一个sdk工具包:
在这里插入图片描述

将打好的sdk的jar包发给第三方系统

二 第三方系统B集成SDK

系统B收到系统A的sdk工具包后,通过maven命令上传到maven仓库

# 注意修改Dfile后边jar包所在的路径
mvn install:install-file -Dfile=E:\jar\ultrahdCommonUtils-0.0.1-SNAPSHOT.jar -DgroupId=com.ultrahd -DartifactId=ultrahdCommonUtils -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar

在这里插入图片描述

可以在仓库看到刚上传的包
在这里插入图片描述

引入SDK依赖

<dependency>
   <groupId>com.ultrahd</groupId>
    <artifactId>ultrahdCommonUtils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

在application.yml里配置系统A提供的真实的url地址、用户名、密码

# url、username、password必须真实
app:
  url: http://192.168.11.129:8089
  username: test
  password: test54321

注入GetTokenService后,调用getToken获取token串

package com.exam.testgettoken.controller;

import com.ultrahd.ultrahdcommonutils.service.GetTokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/test")
public class GetTokenController {
    @Autowired
    private GetTokenService getToken;
    @GetMapping("/getToken")
    public void list()
    {
        String token = getToken.getToken();
        System.out.println("token值:" + token);

    }
}

带着这个token作为请求头,去请求系统A里的接口即可

Request request = new Request.Builder()
            .url(BASE_URL + apiPath)
            .get()
            .addHeader("Authorization", "Bearer " + token) //注意,在这里加请求头
            .build();
        
Response response = client.newCall(request).execute();
System.out.println("接口响应:" + response.body().string());
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐