Beveiliging 25.10
Deze functie is in openbare preview en klaar voor productiegebruik. Tijdens de previewperiode kunnen API's worden verfijnd op basis van feedback van de ontwikkelaarsgemeenschap. Wijzigingen worden vooraf aangekondigd via release-opmerkingen en migratiehandleidingen zullen worden verstrekt wanneer dat nodig is.
In moderne webapplicaties verwijst beveiliging naar het controleren van de toegang tot verschillende delen van uw app op basis van gebruikersidentiteit en machtigingen. In webforJ biedt beveiliging een kader voor route-niveau toegangscontrole, waar u weergaven kunt beschermen, authenticatie kunt vereisen en rolgebaseerde machtigingen kunt handhaven.
The webforj-securing-apps skill can protect routes with login, role-based access, and ownership checks. After installing the webforJ AI plugin, ask your assistant:
- "Protect /admin so only users with the ADMIN role can see it."
- "Add a public landing page that anyone can visit."
- "Only let a user edit a record they own."
Traditionele VS beveiligde routing
Bij traditionele onbeveiligde routing zijn alle routes in uw app toegankelijk voor iedereen die de URL kent. Dit betekent dat gebruikers gevoelige pagina's zoals beheerderspanelen of gebruikersdashboarden kunnen bezoeken zonder enige authenticatie of autorisatiecontroles. De verantwoordelijkheid ligt bij ontwikkelaars om handmatig machtigingen in elke component te verifiëren, wat leidt tot inconsistente beveiligingshandhaving en potentiële kwetsbaarheden.
Deze aanpak introduceert verschillende problemen:
- Handmatige controles: Ontwikkelaars moeten onthouden om beveiligingslogica toe te voegen in elke beschermde weergave of lay-out.
- Inconsistente handhaving: Beveiligingscontroles verspreid over de codebasis leiden tot hiaten en fouten.
- Onderhoudskosten: Het wijzigen van toegangsregels vereist het bijwerken van meerdere bestanden.
- Geen gecentraliseerde controle: Geen enkele plek om de beveiliging van de app te begrijpen of te beheren.
Beveiligde routing in webforJ lost dit op door toegangscontrole direct op het route-niveau mogelijk te maken. Het beveiligingssysteem handhaaft automatisch regels voordat een component wordt weergegeven, wat zorgt voor een gecentraliseerde, declaratieve benadering van app-beveiliging. Dit is hoe het werkt:
- Declaratieve annotaties: Markeer routes met beveiligingsannotaties om toegangseisen te definiëren.
- Automatische handhaving: Het beveiligingssysteem controleert machtigingen voordat enige weergave wordt weergegeven.
- Gecentraliseerde configuratie: Definieer beveiligingsgedrag op één plek en pas dit consistent toe.
- Flexibele implementaties: Kies tussen integratie met Spring Security of een aangepaste plain Java-implementatie.
Dit ontwerp maakt authenticatie (het verifiëren van de identiteit van de gebruiker) en autorisatie (het verifiëren van wat de gebruiker kan openen) mogelijk, zodat alleen geautoriseerde gebruikers toegang krijgen tot beschermde routes. Niet-geautoriseerde gebruikers worden automatisch omgeleid of de toegang ontzegd op basis van de geconfigureerde beveiligingsregels.
Voorbeeld van beveiligde routing in webforJ
Hier is een voorbeeld dat verschillende beveiligingsniveaus in een webforJ-app toont:
// Publieke inlogpagina - iedereen kan toegang krijgen
@Route("/login")
@AnonymousAccess
public class LoginView extends Composite<Login> {
private final Login self = getBoundComponent();
public LoginView() {
self.onSubmit(e -> {
handleLogin(e.getUsername(), e.getPassword());
});
whenAttached().thenAccept(c -> {
self.open();
});
}
}
// Producten - vereist authenticatie
@Route(value = "/", outlet = MainLayout.class)
public class ProductsView extends Composite<FlexLayout> {
public ProductsView() {
// productenweergave
}
}
// Facturen - vereist ACCOUNTANT rol
@Route(value = "/invoices", outlet = MainLayout.class)
@RolesAllowed("ACCOUNTANT")
public class InvoicesView extends Composite<FlexLayout> {
public InvoicesView() {
// facturenweergave
}
}
In deze opzet:
- De
LoginViewis gemarkeerd met@AnonymousAccess, waardoor niet-geauthenticeerde gebruikers toegang krijgen tot deze. - De
ProductsViewheeft geen beveiligingsannotatie, wat betekent dat authenticatie standaard vereist is (wanneer de modussecure-by-defaultis ingeschakeld). - De
InvoicesViewvereist deACCOUNTANTrol, zodat alleen gebruikers met boekhoudmachtigingen toegang krijgen tot facturen.
Hoe beveiliging werkt
Wanneer een gebruiker probeert naar een route te navigeren, volgt het beveiligingssysteem deze stroom:
- Navigatie geïnitieerd: De gebruiker klikt op een link of voert een URL in.
- Beveiligingsverificatie: Voordat de component wordt weergegeven, evalueert het systeem beveiligingsannotaties en -regels.
- Beslissing: Op basis van de authenticatiestatus en rollen van de gebruiker:
- Toestaan: Sta navigatie toe en geef de component weer.
- Weigeren: Blokkeer navigatie en omleid naar de inlogpagina of pagina voor toegang geweigerd.
- Weergeven of omleiden: Ofwel wordt de aangevraagde component weergegeven, ofwel wordt de gebruiker dienovereenkomstig omgeleid.
Met automatische handhaving worden beveiligingsregels consistent toegepast in uw hele app, zodat toegangscontrole wordt behandeld voordat enige component wordt weergegeven en ontwikkelaars handmatige controles in elke weergave niet hoeven toe te voegen.
Authenticatie VS autorisatie
Om beveiliging correct in uw app te implementeren, is het belangrijk om het verschil tussen deze twee concepten te begrijpen:
-
Authenticatie: Verifiëren wie de gebruiker is. Dit gebeurt doorgaans tijdens het inloggen wanneer de gebruiker zijn referenties (gebruikersnaam en wachtwoord) opgeeft. Zodra de gebruiker is geverifieerd, wordt de identiteit van de gebruiker opgeslagen in de sessie of beveiligingscontext.
-
Autorisatie: Verifiëren welke toegang de geverifieerde gebruiker heeft. Dit houdt in dat gecontroleerd wordt of de gebruiker de vereiste rollen of machtigingen heeft om toegang te krijgen tot een specifieke route. Autorisatie vindt elke keer plaats dat een gebruiker naar een beschermde route navigeert.
Het beveiligingssysteem van webforJ behandelt beide aspecten:
- Annotaties zoals
@PermitAllbehandelen de authenticatievereisten. - Annotaties zoals
@RolesAllowedbehandelen de autorisatievereisten.
Aan de slag
Deze gids gaat ervan uit dat u Spring Boot met Spring Security gebruikt, wat de aanbevolen aanpak is voor de meeste webforJ-applicaties. Spring Security biedt industriestandaard authenticatie en autorisatie met automatische configuratie via Spring Boot.
De rest van deze documentatie loopt u door het beveiligen van uw routes met Spring Security, van basisconfiguratie tot geavanceerde functies. Als u geen gebruik maakt van Spring Boot of een aangepaste beveiligingsimplementatie nodig heeft, zie dan de Beveiligingsarchitectuur gids om te leren hoe het systeem werkt en hoe u aangepaste beveiliging kunt implementeren.
Onderwerpen
📄️ Getting Started
Spring Security biedt authenticatie en autorisatie voor Spring Boot-toepassingen. Wanneer geïntegreerd met webforJ, beschermt het routes met behulp van annotaties terwijl Spring verantwoordelijk is voor gebruikersbeheer en sessies.
📄️ Security Annotations
Beveiligingsannotaties bieden een declaratieve manier om toegang tot routes in jouw webforJ-app te controleren. Door annotaties aan jouw routecomponenten toe te voegen, definieer je wie toegang heeft tot elke weergave zonder handmatige machtigingscontroles te schrijven. Het beveiligingssysteem handhaaft automatisch deze regels voordat een component wordt weergegeven.
📄️ Accessing User
Spring Security slaat geauthenticeerde gebruikersinformatie op in de SecurityContextHolder, die toegang biedt tot gebruikersnaam, rollen en autorisaties in uw applicatie. Deze sectie laat zien hoe u deze informatie kunt ophalen en gebruiken in webforJ-weergaven en -componenten.
📄️ SpEL Expressions
Spring Expression Language (SpEL) biedt een declaratieve manier om autorisatieregels direct in annotaties te definiëren. De @RouteAccess annotatie evalueert SpEL-uitdrukkingen met behulp van de ingebouwde autorisatiefuncties van Spring Security.
📄️ Custom Evaluators
Custom evaluators breiden het beveiligingssysteem van webforJ uit met gespecialiseerde toegangscontrolelogica die verder gaat dan basisauthenticatie en rolcontroles. Gebruik ze wanneer je dynamische voorwaarden moet verifiëren die afhankelijk zijn van de context van het verzoek en niet alleen van gebruikersrechten.
🗃️ Architecture
4 items