第三方系统集成若依权限校验
·
假设系统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());
更多推荐



所有评论(0)