Add Thesis

Design and implementation of a next generation web interaction SaaS prototype

Written by O. Gumeniuk

Paper category

Master Thesis

Subject

Computer Science

Year

2012

Abstract

Masterarbeit: Das Ziel dieses Projekts ist die Implementierung einer Anwendung unter Verwendung eines Software-as-a-Service-Modells. Die Anwendung wird mit der dynamischen Sprache Groovy implementiert. Die Ziele dieser Masterarbeit sind die Auswahl der Entwicklungssprache auf der Grundlage einer vergleichenden Analyse der beiden populären JVM-Sprachen Groovy und Java. Das zweite Ziel ist es, die Anforderungen an den Autorisierungsmechanismus zu identifizieren, den Prototyp zu erstellen und ihn mit bestehenden Lösungen zu vergleichen. Drei Sicherheitsframeworks Apache Shiro, Spring Security ACL und PF Security wurden während der Arbeit verglichen. Nach den Ergebnissen der vergleichenden Analyse ist PF Security speichereffizient und zeigte während der Tests eine hohe Leistung. Es wurde festgestellt, dass der PF Security Mechanismus die effizienteste Lösung für die Anforderungen der Anwendung ist. Das Einführungskapitel enthält eine allgemeine Problembeschreibung, die die Probleme erklärt, die in der Arbeit behandelt werden. Die vorgeschlagene Lösung beschreibt die Lösungen und Werkzeuge, die zur Lösung des Problems aus dem Abschnitt Problemstellung verwendet werden. Der Abschnitt über den Hintergrund der Arbeit zeigt das Ziel der aktuellen Masterarbeit.1.1 ProblemstellungBei der Entwicklung von Anwendungen ist es wichtig, eine hohe Ausführungsgeschwindigkeit zu haben, da dies die Antwortzeit der Anwendung verkürzt.Dies ermöglicht es, mehr Nutzern Zugang zu den Servern bei geringerer Leistung zu gewähren.Anwendungssicherheit ist das zweite Thema der aktuellen Arbeit. Es ist wichtig, eine hochsichere Anwendung zu haben. Der Schwerpunkt der vorliegenden Arbeit liegt auf dem Teil der Anwendungssicherheit, der die Autorisierung betrifft. Das Ziel ist es, die Anforderungen an den Autorisierungsmechanismus zu identifizieren. Um die oben aufgeführten Probleme zusammenzufassen, können wir sagen, dass der primäre Fokus der aktuellen Masterarbeit ist:- Serverseitige Implementierung unter Verwendung von Groovy mit Grails als Programmiersprache;-PFSecurity als Rahmen für den Sicherheitsteil dieses Prototyps;-Vergleichende Analyse von Autorisierungssicherheitsmechanismen;-Vergleichende Analyse von Java und Groovy Sprachen. 1.2 Ziele der ArbeitDas Ziel der vorliegenden Masterarbeit ist es, sowohl theoretische als auch eine Reihe praktischer Herausforderungen in Bezug auf Benutzerfreundlichkeit, Webtechnologie und Design anzugehen. Im Rahmen dieser Arbeit wurden mehrere Untersuchungen durchgeführt, die in dieser Arbeit beschrieben werden und den Hauptinhalt dieser Masterarbeit darstellen.Die Arbeit wird zusammen mit zwei anderen Studenten durchgeführt. Alle Arbeiten am Projekt sind wie folgt auf die Studenten verteilt:-Cloud-Architektur und Datenmodellierung -Roman Reva;-server-seitige Programmierung -Oleg Gumenuik;-client-seitige Programmierung -Mykhailo Kolchenko.Die Arbeit befasst sich sowohl mit theoretischen als auch mit einer Reihe von praktischen Herausforderungen in Bezug auf Benutzerfreundlichkeit, Webtechnologie und Design. Aus technologischer Sicht werden die Studenten die Grenzen dessen ausloten, was mit Technologien wie Groovy/Grails, ExtJS, Apache Tomcat und MySQL erreicht werden kann, die alle auf Amazon AWS EC2-Servern mit Ubuntu Linux an Bord laufen. Das Hauptziel der vergleichenden Analyse der Java- und Groovy-Sprachen ist es, die richtige Sprache für die Anforderungen der Anwendung auszuwählen. Das Hauptziel der vergleichenden Analyse der Autorisierungsmechanismen ist es, den effizientesten Sicherheitsmechanismus für die Anwendung auszuwählen. Die Hauptidee der Anwendung unterliegt einer Geheimhaltungsvereinbarung und kann in dieser Arbeit nicht diskutiert werden. Alle technischen Details werden jedoch beschrieben. 21.3Struktur des BerichtsDie vorliegende Arbeit besteht aus mehreren Kapiteln:-Einleitung.Allgemeine Problemstellung, Lösungsvorschlag und Hintergrund der Arbeit werden in diesem Abschnitt beschrieben;-Einführung in die Sicherheitsmechanismen.Enthält theoretische Grundlagen und eine Einführung in die bestehenden Sicherheitsmechanismen. Es bietet eine allgemeine Beschreibung aller notwendigen Sicherheitsbegriffe;-Vergleichende Analyse.Bietet die vergleichende Analyse von Java und Groovy Sprachen. Leistungs- und Syntaxanalyse der beiden Sprachen. Der zweite Teil des Abschnitts ist eine vergleichende Analyse von drei Sicherheitsmechanismen auf der Grundlage der ausgewählten Kriterien. Diese vergleichende Analyse ermöglicht es, die speichereffizienteste Lösung mit hoher Leistung auszuwählen;-Schlussfolgerungen.Dieser Abschnitt beschreibt die während der Forschung erzielten Ergebnisse;-Zukunftsarbeit.Zeigt die aktuellen Probleme, die in der Zukunft angegangen werden können, um die in der aktuellen Arbeit erzielten Ergebnisse zu verbessern. 32 Einführung in Sicherheitsmechanismen, Groovy und GrailsDieser Abschnitt beschreibt alle Begriffe und liefert theoretische Grundlagen. 2.1 Einführung in Groovy und GrailsGroovy ist eine dynamische Sprache für die Java Virtual Machine(JVM). Die wichtigsten Merkmale von Groovy sind in der Groovy-Dokumentation (2012) beschrieben: -baut auf den Stärken von Java auf, hat aber zusätzliche Leistungsmerkmale, die von Sprachen wie Python, Ruby und Smalltalk inspiriert sind;-macht moderne Programmierfunktionen für Java-Entwickler mit einer Lernkurve von fast null verfügbar;-unterstützt domänenspezifische Sprachen und andere kompakte Syntax, so dass Ihr Code leicht zu lesen und zu pflegen ist;-erleichtert das Schreiben von Shell- und Build-Skripten mit seinen leistungsstarken Verarbeitungsprimitiven, OO-Fähigkeiten und einer Ant-DSL; -erhöht die Produktivität der Entwickler durch die Reduzierung von Gerüstcode bei der Entwicklung von Web-, GUI-, Datenbank- oder Konsolenanwendungen;-vereinfacht das Testen durch die Unterstützung von Unit-Tests und Mocking out-of-the-box;-lässt sich nahtlos in alle bestehenden Java-Klassen und -Bibliotheken integrieren;-kompiliert direkt in Java-Bytecode, so dass Sie es überall dort einsetzen können, wo Sie Java verwenden können. Grails ist ein Framework für webbasierte Anwendungen. Die offizielle Grails-Dokumentation (2012) enthält eine ausführliche Beschreibung des Grails-Frameworks: Grails zielt darauf ab, das Paradigma "Coding by Convention" auf Groovy zu übertragen. Es ist ein Open-Source-Framework für Webanwendungen, das die Sprache Groovy nutzt und die Java-Webentwicklung ergänzt. Grails ist unter der liberalen Apache 2.0 Software License lizenziert.Die offizielle Dokumentation von Groovy (2012) beschreibt die Hauptmerkmale der Sprache:Groovy versucht, für Java-Entwickler so natürlich wie möglich zu sein. Wir haben versucht, bei der Entwicklung von Groovy dem Prinzip der geringsten Überraschung zu folgen, insbesondere für Entwickler, die Groovy lernen und aus einem Java-Hintergrund kommen.Semikolons. Semikolons in Groovy sind optional, wie die Abbildung 2.1 zeigt:Abbildung 2.1 -Semikolons Beispiel 4Parentheses. Klammern sind in Groovy optional. Anweisungen aus der Abbildung 2.2 zeigen, dass:Abbildung 2.2 -Parentheses exampleReturn Type und das return Keyword. In Groovy ist es nicht notwendig, einen Rückgabetyp für die Methode anzugeben, und die Verwendung des Schlüsselworts return ist nicht obligatorisch. Standardmäßig ist die letzte Anweisung in der Methode die return-Anweisung. Ein Beispiel ist in Abbildung 2.3 dargestellt:Abbildung 2.3 -Schlüsselwort ReturnBeispielGetters und Setters. Eigenschaften sind wie öffentliche Felder, und es ist nicht notwendig, Getter und Setter explizit zu definieren (außer in dem Fall, in dem es notwendig ist, das Standardverhalten zu ändern). Ein Beispiel ist in Abbildung 2.4 dargestellt: Abbildung 2.4 - Beispiel für Getter und Setter - Zugriffsmodifikatoren. Bashar Abdul-Jawad (2012) liefert eine Definition für Zugriffsmodifikatoren: In Java hat ein Klassenmitglied, dem kein Zugriffsmodifikator zugewiesen ist, einen Standardzugriff, was bedeutet, dass nur aus dem Paket, in dem es deklariert ist, auf es zugegriffen werden kann. In Groovy hingegen sind alle Methoden und Felder standardmäßig öffentlich, so dass sie von überall aus zugänglich sind. 5Dynamische Typisierung. Groovy ist eine dynamische Sprache, die dynamische Typisierung unterstützt. Abbildung 2.5 zeigt die dynamische Typisierung in Aktion:Abbildung 2.5 -Beispiel für dynamische TypisierungSchließungen. Die offizielle Website von Groovy (2012) bietet eine Definition für Groovy Closures:A Groovy Closure is like a "code block" or a method pointer. Es ist ein Stück Code, das definiert wird und dann zu einem späteren Zeitpunkt ausgeführt wird. Es hat einige besondere Eigenschaften wie implizite Variablen, Unterstützung für Currying und Unterstützung für freie Variablen.Abbildung 2.6 zeigt die Closures in Aktion:Abbildung 2.6 -Closure-BeispielAbbildung 2.6 zeigt uns, dass dieser "Codeblock" wiederverwendbar ist und es etwas Ähnliches wie die Methoden gibt. Es ist auch möglich, die Parameter an Closures zu übergeben.GroovyMarkup.Groovyofficial web site(2012) hat eine gute Definition von GroovyMarkup: Groovy hat native Unterstützung für verschiedene Markup-Sprachen von 6XML, HTML, SAX, W3C DOM, Ant-Tasks, Swing-Benutzeroberflächen usw.Dies alles wird über die in Abbildung 2.7 dargestellte Syntax erreicht:Abbildung 2.7 -NodeBuilder-BeispielWelche Art von Builder-Objekt auch immer verwendet wird, die Syntax ist die gleiche. Das bedeutet, dass das someBuilder-Objekt eine Methode mit dem Namen "people" hat, die mit 2 Parametern aufgerufen wird:-eine Map mit Argumenten ['kind':'folks', 'groovy':true];-ein Closure-Objekt, das, wenn es aufgerufen wird, 2 Methoden auf dem Builder mit dem Namen "person" aufruft, die jeweils 2 Parameter benötigen, eine Map mit Werten und eine Closure.Jetzt werden wir ein Beispielprogramm verwenden, das in Java geschrieben wurde, und wir werden es Schritt für Schritt in Groovy umschreiben. Nehmen wir an, dass wir eine Klasse mit drei Eigenschaften haben, die in Abbildung 2.8 dargestellt ist:Abbildung 2.8 - BeispielklasseUm Todo-Objekte zu erstellen und Informationen in ihren Feldern in Java zu speichern, müssen wir Konstruktoren initialisieren. Eine unserer Anforderungen ist es, die Möglichkeit zu haben, nur ausgewählte Argumente an die Konstruktormethode zu übergeben oder ein leeres Objekt mit Standardwerten zu erzeugen. Das bedeutet, dass wir vier verschiedene Konstruktoren benötigen, die in Abbildung 2.9 dargestellt sind: 7Abbildung 2.9 -BeispielklassemitKonstruktorenDies erforderte 14 Zeilen Code, um unsere Anforderungen zu erfüllen. In Groovy müssen Sie keine Konstruktoren angeben. Um ein neues Objekt zu erstellen, müssen Sie den Eigenschaftsnamen und den Wert angeben, wie in Abbildung 2.10 gezeigt: Abbildung 2.10 - Beispiel für das Erstellen eines neuen Todo-ObjektsNächste Schritte sind Getter und Setter. In Java müssen wir Getter und Setter für alle Eigenschaften initialisieren, aber in Groovy müssen Sie das nicht tun. in unserem Fall müssen wir die Methoden toString, equals und hashCod überschreiben. In Java würde dies zusätzliche Codezeilen erfordern, aber in Groovy müssen Sie die Annotation über der Klasse angeben, in der Sie solche Methoden wünschen, wie in Abbildung 2.11 gezeigt:Abbildung 2.11-Beispiel für die Annotationen toString, Equals und HashCodeIn einer neuen Groovy-Klasse haben Sie keine Getter- und Setter-Methoden, Konstruktoren und durch Hinzufügen von Annotationen haben Sie toString(), equals() und hashCode() Methoden. Anhang A enthält den vollständigen Java-Quellcode dieses Beispielprogramms. Sie sehen, dass die Anzahl der Zeilen von 74 auf nur 7 reduziert wurde. Groovy kümmert sich um die häufigsten Dinge und der Entwickler kann sich auf wichtigere Dinge konzentrieren. Dies spart dem Entwickler Zeit und macht den Code lesbarer.2.2 Einführung in Sicherheits-FrameworksSicherheit ist ein wichtiger Teil der Anwendung. Ihr sollte gebührende Aufmerksamkeit und viel Zeit gewidmet werden, damit der Endbenutzer sicher sein kann, dass seine persönlichen Daten nicht an Dritte weitergegeben werden. Der Benutzer muss sich keine Sorgen um die Sicherheit der Informationen in dem von ihm benutzten System machen. Der Benutzer muss sicher sein, dass die Daten sicher gespeichert und Wir können die wichtigsten Sicherheitsthemen definieren, die für die Anwendung von Bedeutung sind und besprochen werden: -Authentifizierung;-Autorisierung;-Vertraulichkeit;-Registrierung;Authentifizierung:Wie sich ein Benutzer (Auftraggeber) bei einem System anmeldet (authentifiziert), indem er eine Art von eindeutig identifizierenden Daten (Anmeldeinformationen) verwendet.Die gängigste Methode ist eine Kombination aus Benutzername und Kennwort, die in einem Anmeldeformular verwendet und an den Server übermittelt wird, der die Kombination überprüft und die Authentifizierungsanfrage entweder genehmigt oder ablehnt. Varianten dieses Schemas sind z.B. einmalig generierte Passwörter, die als SMS an ein Mobiltelefon gesendet werden und dann als Passwortteil der Anmeldedaten verwendet werden.Autorisierung:Welche Operationen ein authentifizierter Prinzipal innerhalb des Systems durchführen darf.Dies ist im Allgemeinen eng mit dem Konzept der Rollen verbunden. Eine Rolle ist ein symbolischer Name, der verwendet wird, um die Fähigkeit zur Durchführung von Geschäftsvorgängen zu gewähren/zu verweigern. Ein Prinzipal ist mit einer oder mehreren Rollen (oder Rollengruppen) verbunden, die die Menge der erlaubten Geschäftsvorgänge definieren. Vertraulichkeit: Wie die Kommunikation zwischen dem Benutzer/Prinzipal und dem Server vor Dritten geschützt wird. Für die HTTP-Kommunikation bedeutet dies die Verwendung des HTTPS-Protokolls. Voraussetzung für die ordnungsgemäße Einrichtung einer SSL-TCP-Socket-Kommunikation sind X.509-Zertifikate (pub-priv-Schlüsselpaare). Für eine kommerzielle Website ist es sehr empfehlenswert, ein anerkanntes Unternehmen (CA = Certificate Authority) zu beauftragen, sein eigenes Zertifikat zu signieren (CR = Certificate Request). Die CA besitzt ein selbstsigniertes Zertifikat, wird aber von den Browserherstellern als "vertrauenswürdig" eingestuft, so dass diese ihre Browser mit dem öffentlichen Schlüssel des CA-Zertifikats (RC = Root Certificate) vorgeladen haben. Bei der Kontaktaufnahme mit dem Server über HTTPS bittet der Browser zunächst um Erlaubnis, bevor er den Zugriff auf die Website gewährt.Registrierung: Wie der Benutzer (Auftraggeber) ein neues Konto innerhalb des Systems erhält, das die Anmeldedaten und andere persönliche Informationen enthält, wird in der Regel durch den Benutzer (oder eine andere Person, z. B. einen Administrator) durchgeführt, der seine persönlichen Daten über ein Formular eingibt. Nach erfolgreicher Validierung der Formulardaten wird der Kontodatensatz erstellt. Die Anmeldedaten können entweder vom Benutzer eingegeben oder vom System generiert werden (Einmalpasswort).2.2.1 Einführung in Spring SecurityACLSpring Security offizielle Website (2012) bietet eine gute Definition für Spring Security: 9Spring Security ist ein leistungsstarkes und hochgradig anpassbares Authentifizierungs- und Zugriffskontroll-Framework. Es ist der De-facto-Standard für die Absicherung von Spring-basierten Anwendungen. Spring Security ist eines der ausgereiftesten und am weitesten verbreiteten Spring-Projekte. Spring Security ist außerdem leicht zu erlernen, einzusetzen und zu verwalten. Ein dedizierter Sicherheits-Namespace bietet Direktiven für die meisten gängigen Operationen und ermöglicht eine vollständige Anwendungssicherheit in nur wenigen XML-Zeilen. Read Less