Vorwort
Da sich die Softwareentwicklung rasant weiterentwickelt und die Anforderungen weiter wachsen, stehen Entwickler vor immer mehr Druck und Herausforderungen. Herkömmliche Entwicklungsmethoden erfordern viel Zeit und Energie, und das Aufkommen von Low-Code-Entwicklungsplattformen bietet Entwicklern eine effizientere und schnellere Entwicklungsmethode. Heute wird der Redakteur das Erstellen eines Befehls-Plug-Ins als Beispiel nehmen, um zu zeigen, wie die Java-Sprache zum effizienten Erstellen eines benutzerdefinierten Plug-Ins verwendet werden kann.
Umweltvorbereitung
- Movable Type Grid Plug-In-Erstellungstool – Java-Version (forguncyJavaPluginGenerator)
- Rasterdesigner für bewegliche Schriftarten (Version 10.0 und höher)
- IDE-Compiler (z. B. IntelliJ IDEA Community Edition)
- Java-Laufzeitumgebung
- JDK8.0-Version und höher
Plugin-Generator
Öffnen Sie den Link zum Forguncy Java Plugin Generator-Tool und der Java-Version ( forguncyJavaPluginGenerator ) und laden Sie den [Forguncy Java Plugin Generator] herunter. Es wird empfohlen, die komprimierte Paketversion zu verwenden.
Öffnen Sie [forguncyJavaExtensionGenerateTool.exe] und konfigurieren Sie die grundlegenden Informationen des Plug-Ins in der folgenden Schnittstelle:
Klicken Sie, um das Serverbefehls-Plug-in zu erstellen. Nach Abschluss der Erstellung wird die Projektdatei im entsprechenden Verzeichnissatz generiert.
Als nächstes verwenden Sie den IDE-Compiler, um das MyPlugin-Projekt zu öffnen. Nach dem Öffnen sieht das Projektverzeichnis wie folgt aus:
Zu diesem Zeitpunkt sind die vorbereitenden Arbeiten abgeschlossen. Als Nächstes schreiben wir die Codelogik.
Code
Abhängigkeiten hinzufügen
Bevor wir den Code implementieren, müssen wir zunächst einige Abhängigkeiten im Zusammenhang mit dem beweglichen Typraster hinzufügen. Wie unten gezeigt, müssen wir der POM-Datei die folgenden Abhängigkeiten hinzufügen:
Ersetzen Sie einfach Icon.png und PluginLogo.png durch das Symbol und Logo des Plug-ins.
Und [PluginConfig.json] wird zum Konfigurieren grundlegender Plug-In-Informationen verwendet:
{
"assembly": [], // 如需要加载其他类
"javascript": [], // 如需加载其他JavaScript文件
"css": [], // 如需加载其他css文件
"image": "resources/PluginLogo.png", // 需要加载图片的相对路径
"description": "这是一个活字格插件", // 插件的文本描述信息
"description_cn": "这是一个活字格插件", // 插件的中文文本描述信息
"name": "MyPlugin", // 插件名称
"name_cn": "我的插件", // 插件中午名称
"pluginType": "command", // 插件类型,当前为命令类型插件
"guid": "fefeb164-ab98-48c8-b309-b5410052e504", // 插件唯一标识GUID,建议勿修改
"version": "1.0.0.0", // 插件版本
"dependenceVersion": "10.0.0.0" // 插件支持依赖最低活字格版本
}
Schreiben Sie die Kerncodelogik
Nachdem Sie die obige Konfiguration abgeschlossen haben, können Sie die Plug-in-Logik schreiben. Das Folgende ist ein Beispielcode des Plug-Ins, das hauptsächlich eine Zufallszahlensignatur über 5 Parameter (AppSecret, Anforderungs-ID, Zeitstempel, Daten und Signaturergebnis) generiert.
package org.example;
import com.grapecity.forguncy.LoggerContext;
import com.grapecity.forguncy.commands.ICommandExecutableInServerSide;
import com.grapecity.forguncy.commands.IServerCommandExecuteContext;
import com.grapecity.forguncy.commands.annotation.ResultToProperty;
import com.grapecity.forguncy.commands.annotation.common.Category;
import com.grapecity.forguncy.commands.entity.Command;
import com.grapecity.forguncy.commands.entity.ExecuteResult;
import com.grapecity.forguncy.commands.enumeration.CommandScope;
import com.grapecity.forguncy.plugincommon.common.annotation.*;
import lombok.Data;
import org.apache.commons.codec.binary.Base64;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.servlet.http.HttpServletRequest;
@Data
@Icon( uri= "resources/Icon.png")
@Category(category = "程杰合集")
public class MyPlugin extends Command implements ICommandExecutableInServerSide {
private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
@DisplayName(displayName = "AppSecret")
@FormulaProperty
@Required
private String appSecret;
@DisplayName(displayName = "请求ID")
@FormulaProperty
@Required
private String requestId;
@DisplayName(displayName = "时间戳")
@FormulaProperty
@Required
private String timestamp;
@DisplayName(displayName = "数据")
@FormulaProperty
@Required
private String data;
@ResultToProperty
@FormulaProperty
@DisplayName(displayName = "签名结果")
private String resultTo = "结果";
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
Long innerTimestamp = Long.parseLong(timestamp);
String res = null;
try {
res = sign(appSecret, requestId, innerTimestamp, data);
} catch (Exception e) {
throw new RuntimeException(e);
}
try {
dataContext.getParameters().put(resultTo, res);
} catch (Exception e) {
throw new RuntimeException(e);
}
ExecuteResult executeResult = new ExecuteResult();
executeResult.getReturnValues().put("结果", res);
return executeResult;
}
@Override
public boolean getDesignerPropertyVisible(String propertyName, CommandScope commandScope) {
return super.getDesignerPropertyVisible(propertyName, commandScope);
}
@Override
public String toString() {
return "签名程杰";
}
public static String sign(String appSecret, String requestId, Long timestamp, String data) throws Exception{
// 1.签名参数按自然升序排列,拼接上data
StringBuilder sb = new StringBuilder();
sb.append("appSecret=").append(appSecret).append("&")
.append("requestId=").append(requestId).append("&")
.append("timestamp=").append(timestamp)
.append(data);
// 2.对签名字符串base64编码后获取32位md5值
// 2.对签名字符串base64编码后获取32位md5值
String base64Encode = base64Encode(sb.toString().getBytes("UTF-8"));
String md5Value = md5(base64Encode);
// 3.将得到的MD5值进行sha1散列,转换为16进制字符串
String sign = sha1(md5Value);
return sign;
}
/**
* 对字符串进行MD5加密,得到32位MD5值
* @param text 明文
* @return 密文
*/
public static String md5(String text) {
try {
MessageDigest msgDigest = MessageDigest.getInstance("MD5");
msgDigest.update(text.getBytes("UTF-8"));
byte[] bytes = msgDigest.digest();
// 转成16进制
return new String(encodeHex(bytes));
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("System doesn't support MD5 algorithm.");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("System doesn't support your EncodingException.");
}
}
/***
* SHA加密
* @return
*/
public static String sha1(String content) throws Exception {
MessageDigest sha = MessageDigest.getInstance("SHA1");
byte[] byteArray = content.getBytes("UTF-8");
return new String(encodeHex(sha.digest(byteArray)));
}
/**
* base64编码
*
* @param content
* @return
* @throws Exception
*/
public static String base64Encode(byte[] content) throws Exception {
return Base64.encodeBase64String(content).replaceAll("(\\\r\\\n|\\\r|\\\n|\\\n\\\r)", "");
}
/**
* base64解码
*
* @param content
* @return
* @throws Exception
*/
public static byte[] base64Decode(String content) throws Exception {
return Base64.decodeBase64(content);
}
/**
* 转换成16进制
* @param data
* @return
*/
private static char[] encodeHex(byte[] data) {
int l = data.length;
char[] out = new char[l << 1];
// two characters form the hex value.
for (int i = 0, j = 0; i < l; i++) {
out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];
out[j++] = DIGITS[0x0F & data[i]];
}
return out;
}
public static String getPostData(HttpServletRequest request) {
StringBuilder data = new StringBuilder();
String line;
BufferedReader reader;
try {
reader = request.getReader();
while (null != (line = reader.readLine())) {
data.append(line);
}
} catch (IOException e) {
return null;
}
return data.toString();
}
}
Verwenden Sie Maven, um Plug-Ins zu packen
Nachdem der Code geschrieben wurde, packen Sie das gesamte Projekt: Klicken Sie hier auf [bereinigen] und dann auf [Installieren]:
Dann erscheint das verpackte Produkt im [Ziel]-Verzeichnis:
Installieren Sie dann das verpackte Zip-Plug-In im Grid-Designer für bewegliche Schriftarten und verwenden Sie es.
Erstellen Sie einen neuen Befehl und Sie finden das Plug-in, das Sie gerade gepackt haben, in der Befehlsauswahl.
Geben Sie die Parameter ein:
Dies kann im serverseitigen Befehl getestet werden:
Wie Sie sehen können, wird in den obigen Testergebnissen eine Zufallszahlensignatur zurückgegeben. Auf diese Weise wurde ein Plug-in entwickelt, das in der Java-Sprache erstellt wurde.
Zusammenfassen
Das Obige ist der gesamte Prozess der Verwendung von Java zum Entwickeln eines Befehls-Plug-Ins auf einer Low-Code-Plattform. Wenn Sie weitere Informationen erhalten möchten, klicken Sie bitte hier, um sie anzuzeigen.
Erweiterungslink:
Was ist eine Low-Code-Entwicklungsplattform?
Fellow Chicken „Open-Source“ -Deepin-IDE und endlich Bootstrapping erreicht! Guter Kerl, Tencent hat Switch wirklich in eine „denkende Lernmaschine“ verwandelt. Tencent Clouds Fehlerüberprüfung und Situationserklärung vom 8. April RustDesk-Remote-Desktop-Startup-Rekonstruktion Web-Client WeChats Open-Source-Terminaldatenbank basierend auf SQLite WCDB leitete ein großes Upgrade ein TIOBE April-Liste: PHP fiel auf ein Allzeittief, Fabrice Bellard, der Vater von FFmpeg, veröffentlichte das Audiokomprimierungstool TSAC , Google veröffentlichte ein großes Codemodell, CodeGemma , wird es dich umbringen? Es ist so gut, dass es Open Source ist – ein Open-Source-Bild- und Poster-Editor-Tool