Posts

Posts mit dem Label "Spring" werden angezeigt.

Vue.js Frontend mit Spring Boot Backend

Bild
Vue.js ist eine schnelle und flexible JavaScript-basierte Frontend-Entwicklungsplattform. Durch intuitive Syntax und umfangreiche Bibliotheken ist es eine der besten Optionen für moderne Frontend-Entwicklung. Hier kombinieren wir es mit einem Spring Boot Backend! Frontend und Backend im Zusammenspiel Was bauen wir genau? Wir programmieren ein modernes Frontend mit Vue.js.  Mit npm bauen wir das Frontend als produktionsbereites, kompaktes Artefakt. Danach Kopieren wir es in unsere Spring Boot Anwendung, so dass es vom integrierten Application Server (z. B. Tomcat oder Netty) ausgeliefert wird. Mit Spring Boot implementieren wir das Backend mit REST-API für das Vue.js Frontend. Das folgende Bild zeigt die Struktur unseres Spring Boot Servers mit integriertem Vue.js Frontend. Zuerst lädt der Benutzer die komplette Frontend Anwendung im Browser. Sofern diese mit Vue.js als Single Page Application gebaut wurde, finden anschließend nur noch REST-Requests statt.  Frontend und Backend Entwickl

OpenID Connect mit Spring Boot 3

Bild
Authentifizierung mit OpenID Connect geht einfach dank Spring Boot. Wir bauen den Login Deiner Web-Anwendung mit dem Autorisierungsserver Deiner Firma. Wie wir dazu OpenID Connect mit Spring Boot 3 konfigurieren, zeige ich in diesem Blog-Artikel. OpenID Connect - Authorization Code Prozess OpenID Connect ist ein Single Sign-On Login-Verfahren. Zur Umsetzung komplexer Anwendungsfälle verwenden größere Firmen meist verteilte Systeme. Damit der Benutzer z. B. beim Online-Shopping den Systemwechsel von Produktseiten zum Einkaufswagen und zur Kasse nicht wahrnimmt, loggt er sich mittels Single Sign-On nur einmal ein. Die beteiligten Systeme authentifizieren den eingeloggten Benutzer anhand seiner Single Sign-On Session. Detaillierte Informationen über OpenID Connect und Single Sign-On findet ihr hier . In diesem Artikel fokussiere ich mich auf das Anwendungs-System, welches zur Benutzer-Authentifizierung den firmeneigenen OpenID Identity Provider verwendet. Bevor wir uns die Implementierung

Asynchroner, gepufferter Nachrichten-Austausch mit RabbitMQ und Spring

Bild
RabbitMQ ist ein Nachrichten-Broker mit integrierter Queue zur asynchronen Kommunikation zwischen Services. Der Produzenten-Service übergibt Nachrichten an RabbitMQ ohne auf den Konsumenten-Service zu warten. Der Konsument holt sich Nachrichten aus der RabbitMQ Queue nach Bedarf und kann so nicht vom Produzent mit Nachrichten überflutet werden. Hier zeige ich die Spring AMQP Implementierung zur RabbitMQ Integration. Vorteile des asynchronen, gepufferten Nachrichten-Austauschs Nachrichten Produzent und Konsument müssen nicht aufeinander warten. Wenn der Produzent z. B. für den Benutzer einen Auftrag erstellt, muss der Benutzer nicht warten bis der Konsument den Auftrag erfolgreich verarbeitet hat. Der Produzent übergibt die Nachricht an die RabbitMQ Queue und kann dem Benutzer danach eine Erfolgsmeldung anzeigen. Das ist insbesondere bei lang andauernden Auftragsverarbeitungen im Backend (Konsument) angenehm für den Benutzer, da er nicht warten muss. Der Konsument könnte den Benutzer sp

Spring Security 6: Login, Logout & Rollen

Bild
Spring Security ermöglicht Login und Logout für Web-Anwendungen in  wenigen Konfigurationsschritten . Mit Spring Security sichern wir einzelne  Webseiten oder API-Endpunkte  so ab, dass nur authentifizierte Benutzer mit festgelegten Rollen zugreifen können. Wie funktioniert das? Lest weiter! Hinweis: Für einen ersten Einblick zu Spring Security, schaut euch gerne meinen Einsteiger-Artikel an. Dort seht ihr wie Spring Security zum Spring Boot hinzugefügt wird und wie Benutzer mit Rollen definiert werden. Abgesicherte und frei zugängliche Seiten Die Spring Security Starter Dependency ist ohne weitere Konfiguration produktionsbereit, da sie alles absichert. Nur eingeloggte Benutzer haben Zugang. Um anonymen Benutzern bestimmte Seiten zugänglich zu machen, müssen wir die Authentifizierung und den Default Login anpassen. @Configuration @EnableWebSecurity public class SecurityConfiguration {      @Bean      SecurityFilterChain authenticatedAndFreePagesWithLogin(                HttpSecurity

Spring 6: ProblemDetail die Standardisierung von Fehlern in REST APIs

Der RFC 7807 standardisiert das Format von Fehlern in HTTP Responses. Spring 6 liefert die Umsetzung mit der Klasse ProblemDetail ! In der täglichen Arbeit nutzen wir viele Services über ihre REST APIs. Ein klassisches Problem ist, dass verschiedene APIs die gleichen Datenmodelle auf unterschiedliche Weise modellieren. Dann sind wir als Nutzer dieser APIs genötigt Mapper zwischen den API-Modellen zu schreiben. Dieses Problem gibt es auch bei Fehlern, welche beim Nutzen einer API auftreten können. Viele APIs verwenden hier unterschiedliche Formate. Der RFC 7807 standardisiert das Fehler-Format, siehe: https://www.rfc-editor.org/rfc/rfc7807.html   Ein sinnvolles Feature von Spring 6 ist die Umsetzung des RFC 7807 durch die Klasse ProblemDetail . Im Folgenden zeige ich euch wie einfach ihr das in eurer API nutzen könnt. Dann bekommt ihr standardisierte Fehlerbeschreibungen wie diese: {      "type" :  "about:blank" ,      "title" :  "Item not found."

Spring Native Microservices mit GraalVM - Blitzstart in der Cloud

Bild
Der perfekte Microservice skaliert in der Cloud optimal, so dass sprunghaft steigende Last fehlerfrei verarbeitet wird. Mit Spring Native und der GraalVM können wir Cloud native Images bauen. Container von nativen Images starten trotz geringerem Ressourcenverbrauch blitzschnell. Dazu zeige ich euch hier eine Demo. AOT Kompilierung mit GraalVM GraalVM ist eine Java VM (Virtuelle Maschine) und ein JDK (Java Development Kit) in den Java LTS Versionen 11 oder 17. Oracle entwickelt GraalVM und bietet es als freie Community Edition oder lizenzpflichtige Enterprise Edition an. Seit Version 19 im Mai 2019 gilt GraalVM als produktionsreif. Die große Besonderheit von GraalVM ist die ahead-of-time (AOT) Kompilierung des Sourcecodes. Damit bauen wir in der Build-Phase (z.B. mit Maven) ein natives Image. Native Images enthalten alle benötigten Applikations Klassen, Dependencies, 3rd Party Bibliotheken und JDK Klassen. Das native Image ist eine alleinstehende, ausführbare Binärdatei, deren Vorteile