Skydda endpoints med anpassade åtkomstregler
Gå längre än enkla rollkontroller genom att skriva anpassad auktoriseringslogik i Spring Security 6 med AuthorizationManager, SpEL-uttryck och request matchers.
Skydda endpoints med anpassade åtkomstregler är en gratis lektion i Spring Security 6 och JWT-autentisering på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Spring Security 6 och JWT-autentisering, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Spring Security 6 och JWT-autentisering innehåller totalt 4 lektioner.
Varför anpassade åtkomstregler?
Roller och metoder täcker de flesta fall, men verkliga appar behöver mer detaljerad kontroll: endast resursens ägare får redigera den, eller så beror åtkomsten på klockslag eller en feature flag.
Spring Security 6 låter er uttrycka dessa regler deklarativt eller programmatiskt.
DSL:en authorizeHttpRequests
I Spring Security 6 är det moderna sättet att skydda URL:er att använda authorizeHttpRequests. Varje matcher kopplar ett begärandemönster till en åtkomstregel.
http.authorizeHttpRequests(auth -> auth
.requestMatchers('/public/**').permitAll()
.requestMatchers('/admin/**').hasRole('ADMIN')
.anyRequest().authenticated());Matchning efter HTTP-metod
Ni kan begränsa regler till en specifik HTTP-metod, så att läsning och skrivning får olika krav.
http.authorizeHttpRequests(auth -> auth
.requestMatchers(HttpMethod.GET, '/api/orders/**').authenticated()
.requestMatchers(HttpMethod.POST, '/api/orders/**').hasRole('MANAGER'));SpEL med access()
Regeln access() tar ett villkor i Spring Expression Language (SpEL) för dynamisk logik som vanliga matchers inte kan uttrycka.
http.authorizeHttpRequests(auth -> auth
.requestMatchers('/reports/**')
.access(new WebExpressionAuthorizationManager(
"hasRole('ANALYST') and request.getHeader('X-Region') == 'EU'")));Gränssnittet AuthorizationManager
För full kontroll implementerar ni AuthorizationManager. Det returnerar ett AuthorizationDecision som beviljar eller nekar åtkomst baserat på autentiseringen och begäran.
public interface AuthorizationManager<T> {
AuthorizationDecision check(Supplier<Authentication> auth, T object);
}Skriv en anpassad AuthorizationManager
Här är en manager som endast tillåter åtkomst under arbetstid. Leverantören tillhandahåller den aktuella användaren och objektet innehåller begärandekontexten.
AuthorizationManager<RequestAuthorizationContext> businessHours =
(auth, ctx) -> {
int hour = LocalTime.now().getHour();
boolean ok = hour >= 9 && hour < 18;
return new AuthorizationDecision(ok);
};Koppla in den
Koppla er anpassade manager till en matcher med access(). Alla begäranden till sökvägen utvärderas nu av er logik.
http.authorizeHttpRequests(auth -> auth
.requestMatchers('/maintenance/**').access(businessHours)
.anyRequest().authenticated());Ägarbaserad åtkomst
En vanlig regel är att endast resursens ägare får ändra den. Ni kan läsa en sökvägsvariabel från begärandekontexten och jämföra den med den inloggade användaren.
AuthorizationManager<RequestAuthorizationContext> ownerOnly =
(auth, ctx) -> {
String pathUser = ctx.getVariables().get('userId');
boolean same = auth.get().getName().equals(pathUser);
return new AuthorizationDecision(same);
};Kombinera regler
Spring utvärderar matchers uppifrån och ned och stoppar vid den första träffen. Ordningen spelar roll: placera specifika regler före breda regler och avsluta alltid med en catch-all som anyRequest().
Neka som standard
En säker grundnivå nekar allt som inte uttryckligen har tillåtits. Använd denyAll() som sista regel när ni vill ha en strikt allow-list.
http.authorizeHttpRequests(auth -> auth
.requestMatchers('/health').permitAll()
.anyRequest().denyAll());Testa åtkomstregler
Verifiera era regler med @WithMockUser och MockMvc. Kontrollera att auktoriserade användare får 200 och obehöriga användare får 403.
mockMvc.perform(get('/admin/dashboard'))
.andExpect(status().isForbidden());Snabb kontroll
Testa er förståelse av anpassade åtkomstregler.
Sammanfattning
Ni har lärt er att skriva anpassad auktorisering i Spring Security 6:
- Använd DSL:en
authorizeHttpRequestsmed matchare för sökvägar och metoder - Tillämpa SpEL-villkor via
access() - Implementera
AuthorizationManagerför dynamiska regler samt regler baserade på ägarskap eller tid - Ordningen spelar roll; avsluta med en matchare som fångar allt och föredra nekande som standard
Med dessa verktyg kan ni tillämpa verksamhetsspecifika säkerhetspolicyer exakt.
Lär dig Java med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Skydda endpoints med anpassade åtkomstregler” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Spring Security 6 och JWT-autentisering, inklusive ”Skydda endpoints med anpassade åtkomstregler”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Spring Security 6 och JWT-autentisering innehåller totalt 4 lektioner.
Vad lär jag mig i ”Skydda endpoints med anpassade åtkomstregler”?
Gå längre än enkla rollkontroller genom att skriva anpassad auktoriseringslogik i Spring Security 6 med AuthorizationManager, SpEL-uttryck och request matchers. Ni övar på Spring Security 6 och JWT-autentisering med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Spring Security 6 och JWT-autentisering?
Du behöver inga förkunskaper. Utbildningen i Spring Security 6 och JWT-autentisering på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Skydda endpoints med anpassade åtkomstregler”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Spring Security 6 och JWT-autentisering-lektionen?
Ja. Varje Spring Security 6 och JWT-autentisering-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Rollbaserad åtkomstkontroll (RBAC)
- Säkerhet på metodnivå med annotationer
- Fördjupning i HttpSecurity-konfiguration
- Skydda endpoints med anpassade åtkomstregler