Übersicht
Structr 6.0.0 ist ein Major Release, das eine komplette Überarbeitung der Architektur mit dem neuen Traits System, die Migration auf GraalVM 25 / JDK 24, Jetty 12, signifikante Leistungsverbesserungen und eine modernisierte Benutzeroberfläche beinhaltet. Diese Version enthält Änderungen, die eine Migration bestehender Anwendungen erfordern.
Wechselnde Änderungen
Architektur
- Traits-System: Vollständige Überarbeitung des Typsystems unter Verwendung von Traits anstelle von Java-Klassenvererbung. Dynamische Schemaklassen sind jetzt statischer Java-Code mit Trait-basierter Komposition.
- Statische Schema-Migration: Die meisten dynamischen Schemaklassen wurden zurück in statischen Java-Code verschoben
- Dynamische Java-Code-Generierung entfernt:
NodeExtender und zugehörige Klassen entfernt
Entfernte Merkmale
- GraphQL-Unterstützung: Vollständig entfernt (basierte auf veraltetem graphql-java v12)
- Inhaltsbereich: Vollständig gestrichen (
ContentItem, ContentContainer)
- Crawler-Modul: Entfernt
- Arbeitsgruppen: Entfernt
- Editiermodus-Bindung: Veraltete Edit-Mode-Bindung zugunsten von Event Action Mapping entfernt
- Windows-Unterstützung: Entfernte Windows-bezogene Skripte und
start.cmd
- R-Integration: Entfernte R-Referenzen (nicht in Graal verfügbar)
Entfernte Funktionen und Eigenschaften
batch() Funktion entfernt (stattdessen doInNewTransaction() verwenden)
keys() und values() Funktionen entfernt ( Object.keys() und Object.values() verwenden)
slice() Ausdruck aus StructrScript entfernt
validate_email() Funktion entfernt ( is_valid_email() verwenden)
restQuery Eigenschaft von DOMNode entfernt ( functionQuery verwenden)
debug() Funktion entfernt
includeAsJavaScript Attribut für entfernte Dateien
includeJs Funktion entfernt (tatsächliche JavaScript-Importe verwenden)
xpathQuery, hideOnIndex, hideOnDetail, renderDetails Eigenschaften entfernt
API-Änderungen
- Alle eingebauten Funktionen wurden in camelCase umbenannt (Abwärtskompatibilitätskonvertierung vorgesehen)
- Ressourcenzugriff „grants“ umbenannt in „permissions“.
- Behandlung von Methodenparametern für REST-Aufrufe geändert
set() Funktion: dritter Call-Style entfernt
Konfiguration
memory.config umbenannt in memory.conf (graceful fallback mit deprecation warning)
- Standard-Upload-Ordner geändert in
/._structr_uploads
- Einstellungen für anonyme Deployment-Servlets wurden entfernt
- Die Einstellung
force-arrays wurde entfernt.
Wichtige neue Funktionen
Eigenschaften System
- Vollständige Neuschreibung des Typensystems mit Hilfe der trait-basierten Komposition
- Unterstützung der Mehrfachvererbung durch Traits
- Verbesserte Flexibilität und Erweiterbarkeit des Schemas
- Dienst-Klassen: Neues Konzept für zustandslose Diensttypen, die nicht instanziiert werden können
Integrierte Dokumentation
- Integriertes Dokumentationssystem mit durchsuchbarem Inhalt
- Inline-Dokumentation für alle eingebauten Funktionen
- Dokumentation für Systemtypen, Lebenszyklusmethoden und Dienste
- Hinweise zur automatischen Vervollständigung aus der Dokumentation der Systemtypen
- Tastaturkürzel
Ctrl+K für die Suche in der Dokumentation
Erweiterungen der Ereignis-Aktionszuordnung
- Flow (FlowContainer) Selektor im EAM-Dialog
- Bestätigungsdialogfunktion für die Ereigniszuordnung
- Unterstützung der Zwei-Faktor-Authentifizierung
- Unterstützung von benutzerdefinierten Ereignisnamen
- CSS-Klasse
structr-action-running wird bei der Ausführung der Aktion automatisch hinzugefügt
- Ereignisse
structr-action-started und structr-action-finished, die auf Trigger-Elemente ausgelöst werden
Seitenpfade und URL-Routing
- Dynamische Pfade für Seiten (
PagePath Objekte)
- URL-Routing-Dialog in der Benutzeroberfläche
- Methoden, die über konfigurierbare HTTP-Verben (GET, POST, usw.) aufgerufen werden können
- Unterstützung privater Methoden
Volltextsuche
- Neue Volltextindizierung mit Neo4j-Volltextindizes
searchFulltext() und searchRelationshipsFulltext() Funktionen
- Volltextsuche UI im Dateibereich mit Kontextanzeige
Benutzerdefinierte Funktionen
- Globale Schemamethoden umbenannt in „benutzerdefinierte Funktionen“.
- Statische Methoden über Cron aufrufbar
- Funktionssignaturen mit Unterstützung der Methodenüberladung
functionInfo() eingebaute Funktion für die Introspektion von Methoden
Neue eingebaute Funktionen
login() – Programmatisch einen Benutzer anmelden
is_valid_uuid() – UUID-Format validieren
is_valid_email() – E-Mail-Prüfung
createFolderPath() – Erstellen von Ordnerhierarchien
searchFulltext() / searchRelationshipsFulltext() – Volltextsuche
rollbackTransaction() – Manuelles Rollback von Transaktionen
addLabels() / removeLabels() – Neo4j Etikettenverwaltung
set_log_level() – Konfiguration der Laufzeitprotokollebene
functionInfo() – Informationen zur Methode abrufen
Leistungsverbesserungen
- Transaktionsbasiertes Caching mit Prefetching ersetzt den globalen Knoten-Cache
- Optimierte HTML/DOM-Rendering-Leistung
- Verbessertes Prefetching für die Benutzerauthentifizierung und die Weitergabe von Berechtigungen
- Bessere Handhabung von Exporten großer Datenmengen
- Optimierte Websocket-Befehle
- Reduzierte Datenbankabfragen durch Zwischenspeicherung von benutzerdefinierten Funktionen
Erweiterungen der Sicherheit
Upload Servlet Sicherheit
- Standard-Upload-Ordner muss nicht leer sein
- Schreibrechte erforderlich für
parent/parentId targeting
uploadFolderPath beschränkt auf authentifizierte Benutzer im Standardordner
- Nicht in der Whitelist aufgeführte Eigenschaften werden beim Hochladen von Dateien blockiert
Sonstige Sicherheit
- Schutz vor serverseitiger Anforderungsfälschung (SSRF) durch Whitelisting im HttpHelper
- Behebung der ZIP-Slip-Schwachstelle in SyncCommand
- Aktualisierte Funktionen
encrypt()/decrypt() zur Verwendung eines sichereren Modus
- Leseschutz für Konfigurationsschlüssel, die Geheimnisse enthalten
- Bouncycastle aktualisiert auf 1.81
Verbesserungen der Benutzeroberfläche
Schema-Editor
- Schwenk- und Zoomfunktion (Mausrad, Ziehen mit der mittleren Maus)
- Pfeile der Merkmalsvererbung angezeigt
- Eingebaute Typen und Beziehungen sichtbar
- Verbesserte Knotenauswahl und -bewegung
- Funktion zum Speichern/Wiederherstellen des Layouts
- „Ausgewählte Typen ausblenden“ Funktionalität
Code Bereich
- Code-Navigation / „Zur Definition“
- Verbesserungen im Bulk-Editiermodus
- Methodenparameter im Ausführungsdialog
- Verwendungsbeispiele mit Kopierschaltflächen
- Monaco-Editor-Einstellungen (automatisch schließende Klammern/Anführungszeichen, automatische Umrandung)
- Anpassbare Monospace-Schriftart/Größe
Dashboard
- Anzeige der HTTP-Anforderungsstatistik
- Verfügbare Prozessoren und Speicherinformationen
- Einrichtungsassistent
- Verbesserte vis.js-Integration mit Ziehen/Zoomen
- Aktualisierungsmeldungen für Skriptaufträge
Abschnitt Daten
- Verbesserte Behandlung von Array-Typen in Erstellungs-/Bearbeitungsdialogen
- Verbesserungen bei der Auswahl von Datum und Uhrzeit
- ZonedDateTime-Unterstützung
- Bessere Handhabung von großen Array-Attributen
- Persistenz der Spaltensortierung
Allgemeine UI
- Benachrichtigungssystem mit Glockensymbol und Nachrichtenanzahl
- Benutzereinstellungen für das automatische Entfernen von zeitlich begrenzten Benachrichtigungen
- SSO-Anmeldeschaltflächen im Anmeldedialog
- Konfigurierbares Zurücksetzen der UI-Einstellungen
- Verbesserte Popup-Dialoge (rasterbasiertes Layout)
- Benutzerdefinierte Bestätigungsdialoge
Aktualisierungen von Abhängigkeiten
Laufzeit
- GraalVM: Aktualisiert auf Version 25.0.0 / JDK 24
- Jetty: Migriert zu Jetty 12
- Neo4j: Unterstützung für Neo4j 2025
Bibliotheken
- Apache Commons Lang3: 3.18.0
- Apache Commons Compress: Sicherheitsupdate
- Logback: 1.5.20
- Bouncycastle: 1.81
- Geotools: 32.4
- vis.js: Neueste Version
- Monaco Editor: 0.51
- Verschiedene andere Aktualisierungen von Abhängigkeiten für Sicherheit und Kompatibilität
Änderungen der Konfiguration
Neue Einstellungen
structr.conf Einstellungen für Heap und Zeitzonen-Konfiguration
- E-Mail-Validierungs-Regex konfigurierbar
- Konfiguration des passiven FTP-Modus-Portbereichs
exec()/exec_binary() Konfiguration der Befehlsprotokollierung
- Automatisch schließende Klammern/Anführungszeichen für den Monaco-Editor
- Standardkonfiguration der Protokollierungsebene
- UUID-Format-Einstellungen (kompakt/gestrichelt/beide)
Entfernte Einstellungen
- GraphQL-Servlet-Konfiguration
- Ältere OAuth-Klassen
- Einsatzservlet anonymer Zugriff
- Verschiedene veraltete Einstellungen
Bemerkenswerte Fehlerbehebungen
- Speicherleck in Skripting-Kontexten behoben
- Probleme mit der Sitzungszeitüberschreitung behoben
- Die Erzeugung von Miniaturansichten für Bilder mit Alphakanal wurde korrigiert
- Leistung der Abfrage zur Erlaubnisausbreitung korrigiert
- Timing der Websocket-Initialisierung korrigiert
- Auflösung der kreisförmigen Gruppenhierarchie behoben
- Implementierung des kaskadierenden Löschens korrigiert
- Behobene LDAP-Gruppenkonfiguration
- Behobener Export/Import von Deployments für verschiedene Randfälle
- Probleme bei der Wiederherstellung von Dateien im Stil von Ransomware behoben
- Probleme bei der E-Mail-Konfiguration behoben
Leitfaden zur Migration
Vor dem Upgrading
- Sichern Sie Ihre Datenbank und Verteilungsexporte
- Überprüfen Sie die oben genannten Änderungen.
- Testen Sie zunächst in einer Staging-Umgebung
Änderungen von Funktionsnamen
Alle eingebauten Funktionen verwenden jetzt camelCase. Eine Abwärtskompatibilitätsschicht ist vorhanden, aber Sie sollten Ihren Code aktualisieren:
get_or_create(...)
to_json(...)
getOrCreate(...)
toJson(...)
restQuery-Migration
Die restQuery Eigenschaft wurde entfernt. Migrieren Sie zu functionQuery:
$.restQuery('/api/users')
$.functionQuery('find', 'User')
Eigenschaften System
Benutzerdefinierte Typen verwenden jetzt Traits. Die Migration erfolgt automatisch, aber überprüfen Sie Ihr Schema nach dem Upgrade auf etwaige Probleme mit:
- Mehrfache Vererbung
- Abstrakte Eigenschaften
- Überschreibung von Methoden
Konfigurationsdatei
Umbenennen memory.config zu memory.conf um Warnungen vor Veralterung zu vermeiden.
Dokumentation
Das integrierte Dokumentationssystem bietet einen umfassenden Überblick über:
- Alle eingebauten Funktionen mit Beispielen
- Systemtypen und ihre Eigenschaften
- Lebenszyklus-Methoden
- Dienste und Konfiguration
- Migrationshinweise für 6.x
Zugang über Ctrl+K in der Structr UI oder das Dokumentationssymbol.
Mitwirkende
Vielen Dank an alle, die diese Version durch Codebeiträge, Fehlerberichte und Dokumentationsverbesserungen möglich gemacht haben.
Vollständiger Changelog
Die vollständige Liste der fast 1.600 Übertragungen zwischen 5.2.1 und 6.0.0 finden Sie im Git-Log oder in der Vergleichsansicht von GitHub.