Rollbaserad åtkomstkontroll (RBAC)
Implementera rollbaserad auktorisering för att begränsa åtkomsten till specifika resurser utifrån användarroller och behörigheter.
Rollbaserad åtkomstkontroll (RBAC) är en gratis lektion i Spring Security 6 och JWT-autentisering på CoddyKit. Detta är lektion 1 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.
Förstå grunderna i RBAC
Välkommen! I dag går vi igenom Role-Based Access Control (RBAC). Det är ett grundläggande säkerhetskoncept för att hantera vem som får göra vad i en applikation.
Föreställ er en skola: elever kan se betyg, lärare kan lägga in betyg och administratörer kan hantera alla användare. Varje grupp har en ”roll” med specifika ”behörigheter”.
- Roll: En samling behörigheter.
- Behörighet: Möjligheten att utföra en specifik åtgärd (till exempel läsa, skriva eller ta bort).
Roller i Spring Security
Spring Security använder roller för att upprätthålla auktorisering. När ni definierar en användare tilldelar ni även en eller flera roller.
Internt behandlar Spring Security roller som Granted Authorities. Enligt konventionen har roller ofta prefixet ROLE_ (till exempel ROLE_ADMIN och ROLE_USER). Det gör det lättare att skilja dem från andra typer av behörigheter.
Tilldela roller till användare
Innan vi kan använda RBAC behöver användarna roller! När en användare loggar in hämtar Spring Securitys autentiseringsprocess de roller som har tilldelats användaren.
Dessa roller läses vanligtvis in från en databas via en UserDetailsService eller definieras direkt i minnet i enklare fall. I våra exempel använder vi användare i minnet för att göra det tydligt.
Skydda URL:er med `hasRole()`
Kärnan i RBAC för webbapplikationer i Spring Security är att konfigurera HttpSecurity. Vi använder metoder som hasRole() för att ange vilka roller som får komma åt vissa URL-mönster.
Om ni till exempel vill skydda en adminsida kan ni skriva: .requestMatchers("/admin/**").hasRole("ADMIN"). Spring Security lägger automatiskt till prefixet ROLE_ när ni använder hasRole().
RBAC-konfiguration för webbsäkerhet
Låt oss se en enkel Spring Security-konfiguration. Denna konfiguration definierar två användare i minnet (user och admin) och skyddar två slutpunkter: /user och /admin.
Försök köra koden och gå till URL:erna!
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
@GetMapping("/user")
public String userEndpoint() {
return "Hello, User!";
}
@GetMapping("/admin")
public String adminEndpoint() {
return "Hello, Admin!";
}
@Configuration
@EnableWebSecurity
static class WebSecurityConfig {
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("password")
.roles("ADMIN", "USER")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/user/**").hasRole("USER")
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin(org.springframework.security.config.Customizer.withDefaults());
return http.build();
}
}
}Testa vår RBAC-konfiguration
När ni har kört föregående exempel öppnar ni webbläsaren och försöker gå till dessa URL:er:
http://localhost:8080/user: Logga in meduser/passwordelleradmin/password. Båda ska fungera!http://localhost:8080/admin: Logga in medadmin/password. Detta ska fungera.http://localhost:8080/admin: Logga in meduser/password. Ni bör få felet ”Access Denied” (403 Forbidden).
Detta visar hur roller begränsar åtkomsten!
Flera roller: `hasAnyRole()`
Vad händer om en slutpunkt kan nås av fler än en roll? Spring Security tillhandahåller hasAnyRole() för detta.
I stället för att ange flera anrop till hasRole() kan ni skriva: .requestMatchers("/dashboard/**").hasAnyRole("USER", "ADMIN"). Detta ger åtkomst om den autentiserade användaren har antingen rollen USER eller rollen ADMIN.
`hasRole()` jämfört med `hasAuthority()`
Ni kan också se att hasAuthority() används. Vad är skillnaden?
hasRole("ADMIN"): Lägger implicit till prefixetROLE_, så den kontrollerar omROLE_ADMINfinns.hasAuthority("ROLE_ADMIN"): Kräver den exakta behörighetssträngen, inklusive prefixetROLE_om det ingår i behörighetens namn.
Generellt föredras hasRole() för tydlighet när ni arbetar med roller som definierats med prefixet ROLE_.
Skydda specifika HTTP-metoder
RBAC kan också tillämpas på specifika HTTP-metoder för en viss sökväg. Detta är användbart för REST API:er där olika åtgärder (GET, POST, PUT, DELETE) kräver olika behörigheter.
Du kan kedja requestMatchers() med HttpMethod:
.requestMatchers(HttpMethod.POST, "/products/**").hasRole("ADMIN")
.requestMatchers(HttpMethod.GET, "/products/**").hasAnyRole("USER", "ADMIN")Här är det endast ADMIN som kan skapa produkter, men både USER och ADMIN kan visa dem.
Metodtips för RBAC
Så här gör du RBAC effektivt och lätt att hantera:
- Håll rollerna enkla: Skapa inte för många roller. Roller bör motsvara tydligt åtskilda arbetsfunktioner.
- Minsta möjliga behörighet: Ge användare endast de roller och behörigheter som krävs.
- Centraliserad hantering: Hantera roller och deras tilldelningar på en enda säker plats.
- Granska regelbundet: Gå regelbundet igenom rolltilldelningar och behörigheter för att säkerställa att de fortfarande är lämpliga.
Kunskapskontroll: RBAC
Du har lärt dig hur man implementerar rollbaserad åtkomstkontroll i Spring Security. Nu testar vi snabbt vad du har förstått!
Sammanfattning: rollbaserad åtkomstkontroll
Bra jobbat! I den här lektionen har du lärt dig:
- Vad RBAC är och varför det är viktigt för auktorisering.
- Hur Spring Security använder roller (som
GrantedAuthority). - Hur man konfigurerar URL-baserad RBAC med
HttpSecurity. - Hur
hasRole()ochhasAnyRole()används för att skydda slutpunkter. - Skillnaden mellan
hasRole()ochhasAuthority(). - Hur RBAC tillämpas på specifika HTTP-metoder.
- Viktiga metodtips för en effektiv RBAC-implementation.
Du har nu en stabil grund för att styra åtkomst utifrån användarroller!
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 ”Rollbaserad åtkomstkontroll (RBAC)” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Spring Security 6 och JWT-autentisering, inklusive ”Rollbaserad åtkomstkontroll (RBAC)”, 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 ”Rollbaserad åtkomstkontroll (RBAC)”?
Implementera rollbaserad auktorisering för att begränsa åtkomsten till specifika resurser utifrån användarroller och behörigheter. 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 1 av 4.
Hur lång tid tar lektionen ”Rollbaserad åtkomstkontroll (RBAC)”?
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