Spring Security 6 och JWT-autentisering · Lektion

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.

Lektion 4 av 413 steg

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 authorizeHttpRequests med matchare för sökvägar och metoder
  • Tillämpa SpEL-villkor via access()
  • Implementera AuthorizationManager fö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.

Gratis att börja

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

  1. Rollbaserad åtkomstkontroll (RBAC)
  2. Säkerhet på metodnivå med annotationer
  3. Fördjupning i HttpSecurity-konfiguration
  4. Skydda endpoints med anpassade åtkomstregler
← Tillbaka till Spring Security 6 och JWT-autentisering