Beveiliging 25.10
Deze functie is in publieke voorvertoning en gereed voor productiegebruik. Tijdens de voorvertoningsperiode kunnen API's worden verfijnd op basis van feedback van de ontwikkelaarsgemeenschap. Eventuele wijzigingen worden van tevoren aangekondigd via release-opmerkingen en migratiegidsen worden verstrekt wanneer dat nodig is.
In moderne webapplicaties verwijst beveiliging naar het beheersen van de toegang tot verschillende delen van uw app op basis van gebruikersidentiteit en machtigingen. In webforJ biedt beveiliging een framework voor toegangscontrole op route-niveau, waarbij 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."
Traditioneel VS beveiligd routeren
Bij traditioneel onbeveiligd routeren zijn alle routes in uw app toegankelijk voor iedereen die de URL kent. Dit betekent dat gebruikers naar gevoelige pagina's zoals adminpanelen of gebruikersdashboards kunnen navigeren zonder enige authenticatie of autorisatiecontroles. De last ligt bij ontwikkelaars om handmatig machtigingen in elke component te verifiëren, wat leidt tot inconsistente handhaving van beveiliging en potentiële kwetsbaarheden.
Deze aanpak introduceert verschillende problemen:
- Handmatige controles: Ontwikkelaars moeten zich herinneren om beveiligingslogica toe te voegen in elke beschermde weergave of lay-out.
- Inconsistente handhaving: Beveiligingscontroles verspreid over de codebase leiden tot hiaten en fouten.
- Onderhoudsbelasting: Wijzigingen in toegangsregels vereisen het bijwerken van meerdere bestanden.
- Geen gecentraliseerde controle: Geen enkele plek om app-beveiliging te begrijpen of te beheren.
Beveiligd routeren in webforJ lost dit op door toegangscontrole rechtstreeks op 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. Zo werkt het:
- Declaratieve annotaties: Markeer routes met beveiligingsannotaties om toegangsvereisten te definiëren.
- Automatische handhaving: Het beveiligingssysteem controleert machtigingen voordat een weergave wordt weergegeven.
- Gecentraliseerde configuratie: Definieer beveiligingsgedrag op één plaats en pas het consistent toe.
- Flexibele implementaties: Kies tussen integratie met Spring Security of een aangepaste gewone Java-implementatie.
Dit ontwerp maakt authenticatie (verifiëren van de identiteit van de gebruiker) en autorisatie (verifiëren van wat de gebruiker kan benaderen) mogelijk, zodat alleen geautoriseerde gebruikers toegang krijgen tot beschermde routes. Ongeregistreerde gebruikers worden automatisch omgeleid of de toegang geweigerd op basis van de geconfigureerde beveiligingsregels.
Voorbeeld van beveiligd routeren in webforJ
Hier is een voorbeeld dat verschillende beveiligingsniveaus in een webforJ-app laat zien:
// Publieke inlogpagina - iedereen kan toegang hebben
@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 hebben. - De
ProductsViewheeft geen beveiligingsannotatie, wat betekent dat het standaard authentificatie vereist (wanneer de modussecure-by-defaultis ingeschakeld). - De
InvoicesViewvereist de rolACCOUNTANT, zodat alleen gebruikers met boekhoudmachtigingen toegang hebben tot facturen.
Hoe beveiliging werkt
Wanneer een gebruiker probeert naar een route te navigeren, volgt het beveiligingssysteem deze stroom:
- Navigatie geïnitieerd: 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: Toestaan van navigatie en de component weergeven.
- Weigeren: Navigatie blokkeren en omleiden naar de inlogpagina of de toegang geweigerd pagina.
- Weergeven of omleiden: Ofwel wordt de aangevraagde component weergegeven, of de gebruiker wordt geschikt omgeleid.
Met automatische handhaving worden beveiligingsregels consistent toegepast over uw gehele app, zodat toegangscontrole wordt afgehandeld voordat een component wordt weergegeven en ontwikkelaars geen handmatige controles in elke weergave hoeven toe te voegen.
Authenticatie VS autorisatie
Om beveiliging in uw app correct te implementeren, is het belangrijk om het verschil tussen deze twee concepten te kennen:
-
Authenticatie: Verifiëren wie de gebruiker is. Dit gebeurt meestal tijdens het inloggen wanneer de gebruiker inloggegevens (gebruikersnaam en wachtwoord) biedt. Zodra de gebruiker is geauthenticeerd, wordt de identiteit van de gebruiker opgeslagen in de sessie of beveiligingscontext.
-
Autorisatie: Verifiëren wat de geauthenticeerde gebruiker kan benaderen. Dit houdt in dat wordt gecontroleerd of de gebruiker de vereiste rollen of machtigingen heeft om toegang te krijgen tot een specifieke route. Autorisatie vindt elke keer plaats wanneer een gebruiker naar een beschermde route navigeert.
Het beveiligingssysteem van webforJ behandelt beide aspecten:
- Annotaties zoals
@PermitAllbehandelen authenticatievereisten. - Annotaties zoals
@RolesAllowedbehandelen 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 authentificatie en autorisatie conform de industriestandaard met automatische configuratie via Spring Boot.
De rest van deze documentatie leidt u door het beveiligen van uw routes met Spring Security, van basisinstelling tot geavanceerde functies. Als u geen gebruik maakt van Spring Boot of een aangepaste beveiligingsimplementatie nodig hebt, zie dan de Beveiligingsarchitectuuromgids 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
Write custom RouteSecurityEvaluators for context-aware checks like ownership verification beyond role-based permissions.
Architecture
4 items
Application Security
3 items