Roolipohjainen käyttöoikeuksien hallinta
Määrittäkää roolipohjainen valtuutus eri käyttäjäroolien yksityiskohtaisten käyttöoikeuksien hallintaa varten.
Roolipohjainen käyttöoikeuksien hallinta on ilmainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.
Roolipohjaisen käytön esittely
Roolipohjainen käyttöoikeuksien hallinta (RBAC) on menetelmä, jolla järjestelmän käyttöä rajoitetaan käyttäjien roolien perusteella.
Käyttöoikeuksia ei määritetä suoraan käyttäjille, vaan rooleille, jotka puolestaan määritetään käyttäjille.
- Yksinkertaistaa tietoturvan hallintaa.
- Parantaa tietoturvakäytäntöjen noudattamisen valvontaa.
- Helpottaa tarkastamista ja ylläpitoa.
RBAC:n hyödyt
RBAC tarjoaa sovellusten suojaamiseen useita etuja:
- Skaalautuvuus: Hallitse monien käyttäjien ja resurssien käyttöoikeuksia helposti sovelluksen kasvaessa.
- Joustavuus: Roolia voidaan muuttaa tai päivittää ilman yksittäisten käyttäjien käyttöoikeuksien muokkaamista.
- Vaatimustenmukaisuus: Auttaa täyttämään sääntelyvaatimukset määrittämällä selkeästi, kuka voi tehdä mitäkin.
Käyttäjäroolien esittäminen
Spring Securityssä roolit esitetään yleensä yksinkertaisina merkkijonoina, joiden alussa on usein ROLE_-etuliite (esim. ROLE_ADMIN, ROLE_USER).
On hyvä käytäntö määrittää nämä vakioina tai enumeraatioina kirjoitusvirheiden välttämiseksi.
public enum UserRole {
ADMIN,
USER
}Spring Security lisää automaattisesti ROLE_-etuliitteen, kun käytät esimerkiksi lauseketta hasRole('ADMIN').
public enum UserRole {
ADMIN,
USER
}Tietoturvan perusmääritys
Ota käyttöön metoditason tietoturva ja määritä rooleilla varustetut käyttäjät määrittämällä SecurityFilterChain-bean.
Tässä esimerkissä määritetään muistissa oleva käyttäjä 'admin' roolilla ROLE_ADMIN ja käyttäjä 'user' roolilla ROLE_USER.
package com.coddykit;
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.method.configuration.EnableMethodSecurity;
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
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true) // Enable @PreAuthorize
public class RbacApplication {
public static void main(String[] args) {
SpringApplication.run(RbacApplication.class, args);
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(authorize -> authorize
.anyRequest().authenticated()
)
.httpBasic(org.springframework.security.config.Customizer.withDefaults());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("password")
.roles("ADMIN")
.build();
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(admin, user);
}
}
@RestController
class PlaceholderController {
@GetMapping("/")
public String home() {
return "Welcome to RBAC Demo!";
}
}Roolirajoitusten soveltaminen
Spring Securityn @PreAuthorize-annotaation avulla käyttöoikeussäännöt voidaan määrittää suoraan ohjainmetodeihin.
Se käyttää Spring Expression Language -kieltä (SpEL) ehtojen arviointiin ennen metodin suorittamista.
@PreAuthorize("hasRole('ADMIN')")Tämä varmistaa, että vain käyttäjät, joilla on ADMIN-rooli, voivat kutsua metodia.
@PreAuthorize("hasRole('ADMIN')")Vain ylläpitäjän käyttöoikeus
Luodaan päätepiste, jota voivat käyttää vain käyttäjät, joilla on ADMIN-rooli. Jos USER yrittää käyttää sitä, hän saa virheen 403 Forbidden.
package com.coddykit;
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.access.prepost.PreAuthorize;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
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
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
public class RbacApplication {
public static void main(String[] args) {
SpringApplication.run(RbacApplication.class, args);
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(authorize -> authorize
.anyRequest().authenticated()
)
.httpBasic(org.springframework.security.config.Customizer.withDefaults());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("password")
.roles("ADMIN")
.build();
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(admin, user);
}
}
@RestController
class AdminController {
@GetMapping("/admin/dashboard")
@PreAuthorize("hasRole('ADMIN')")
public String getAdminDashboard() {
return "Welcome, Admin! This is your dashboard.";
}
@GetMapping("/")
public String home() {
return "Welcome to RBAC Demo!";
}
}Useiden roolien myöntäminen
Joskus päätepisteen tulee olla useamman kuin yhden roolin käytettävissä. Tähän voidaan käyttää metodia hasAnyRole().
Esimerkiksi koontinäyttö voi olla sekä ADMIN- että tavallisen USER-roolin käytettävissä.
package com.coddykit;
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.access.prepost.PreAuthorize;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
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
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
public class RbacApplication {
public static void main(String[] args) {
SpringApplication.run(RbacApplication.class, args);
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(authorize -> authorize
.anyRequest().authenticated()
)
.httpBasic(org.springframework.security.config.Customizer.withDefaults());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("password")
.roles("ADMIN")
.build();
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(admin, user);
}
}
@RestController
class MultiRoleController {
@GetMapping("/dashboard")
@PreAuthorize("hasAnyRole('ADMIN', 'USER')")
public String getUserDashboard() {
return "Hello! Welcome to your dashboard.";
}
@GetMapping("/admin/settings")
@PreAuthorize("hasRole('ADMIN')")
public String getAdminSettings() {
return "Admin settings page.";
}
@GetMapping("/")
public String home() {
return "Welcome to RBAC Demo!";
}
}Mukautetut käyttöoikeuspäätökset
Vaikka hasRole() ja hasAnyRole() kattavat monia tapauksia, Spring Security mahdollistaa monimutkaisempien käyttöoikeussääntöjen määrittämisen.
Voit käyttää SpEL-kieltä useiden ehtojen tarkistamiseen, esimerkiksi hasRole('ADMIN') and hasIpAddress('192.168.1.0/24').
Hyvin monimutkaista tai dynaamista logiikkaa varten voit toteuttaa mukautettuja PermissionEvaluator-beaneja.
RBAC:n testaaminen
Voit testata RBAC-määrityksesi käynnistämällä Spring Boot -sovelluksen ja käyttämällä esimerkiksi Postmania tai työkalua curl:
- Kirjaudu käyttäjänä 'admin' (käyttäjä: admin, salasana: password) ja yritä käyttää kaikkia päätepisteitä.
- Kirjaudu käyttäjänä 'user' (käyttäjä: user, salasana: password) ja varmista, että käyttäjäpäätepisteet ovat käytettävissä mutta vain ylläpitäjille tarkoitetut päätepisteet eivät.
- Yritä käyttää palvelua ilman todennusta ja tarkista, että pyyntö hylätään.
RBAC-käyttöoikeustarkistus
Tarkastellaan seuraavaa Spring Security -määritystä ja ohjainmetodia:
@Configuration
@EnableMethodSecurity(prePostEnabled = true)
// ... other config ...
@Bean
public UserDetailsService userDetailsService() {
UserDetails userA = User.withDefaultPasswordEncoder()
.username("alice").password("pw").roles("USER").build();
UserDetails userB = User.withDefaultPasswordEncoder()
.username("bob").password("pw").roles("MANAGER").build();
return new InMemoryUserDetailsManager(userA, userB);
}
@RestController
class MyController {
@GetMapping("/report")
@PreAuthorize("hasAnyRole('USER', 'ADMIN')")
public String getReport() {
return "Confidential Report";
}
}Mitkä käyttäjät voivat käyttää /report-päätepistettä onnistuneesti?
@Configuration
@EnableMethodSecurity(prePostEnabled = true)
// ... other config ...
@Bean
public UserDetailsService userDetailsService() {
UserDetails userA = User.withDefaultPasswordEncoder()
.username("alice").password("pw").roles("USER").build();
UserDetails userB = User.withDefaultPasswordEncoder()
.username("bob").password("pw").roles("MANAGER").build();
return new InMemoryUserDetailsManager(userA, userB);
}
@RestController
class MyController {
@GetMapping("/report")
@PreAuthorize("hasAnyRole('USER', 'ADMIN')")
public String getReport() {
return "Confidential Report";
}
}RBAC-oppitunnin yhteenveto
Tässä oppitunnissa tutustuimme roolipohjaiseen käyttöoikeuksien hallintaan (RBAC) Spring Boot -mikropalveluissa.
- Opimme määrittämään rooleja ja liittämään niitä käyttäjiin.
- Määritimme Spring Securityn tunnistamaan nämä roolit
SecurityFilterChain-beanin avulla. - Käytimme
@PreAuthorize-annotaatiota yhdessä metodienhasRole()jahasAnyRole()kanssa API-päätepisteiden suojaamiseen käyttäjäroolien perusteella.
RBAC on tehokas tapa hallita sovellusten käyttöoikeuksia tehokkaasti ja turvallisesti.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 24
- Oppitunnit
- 93
Usein kysytyt kysymykset
Onko oppitunti ”Roolipohjainen käyttöoikeuksien hallinta” ilmainen?
Kyllä – oppitunnin ”Roolipohjainen käyttöoikeuksien hallinta” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssin, päivitä CoddyKit PROhon. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Roolipohjainen käyttöoikeuksien hallinta”?
Määrittäkää roolipohjainen valtuutus eri käyttäjäroolien yksityiskohtaisten käyttöoikeuksien hallintaa varten. Harjoittelet Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.
Kuinka kauan ”Roolipohjainen käyttöoikeuksien hallinta”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunnilla?
Kyllä. Jokainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- OAuth2:n ja JWT:n perusteet
- REST-päätepisteiden suojaaminen
- Roolipohjainen käyttöoikeuksien hallinta