Siirry pääsisältöön

Accessing User

Avaa ChatGPT:ssä

Spring Security tallentaa todennetun käyttäjätiedon SecurityContextHolder-objektiin, joka tarjoaa pääsyn käyttäjätunnukseen, rooleihin ja valtuuksiin koko sovelluksessa. Tässä osiossa näytetään, kuinka hakemaan ja käyttämään tätä tietoa webforJ-näkymissä ja -komponenteissa.

Hanki nykyisen käyttäjän tiedot

Spring Security tallentaa todennetut käyttäjätiedot SecurityContextHolder-objektiin, joka tarjoaa säikeittäin turvallisen pääsyn mihin tahansa sovelluksessasi:

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.GrantedAuthority;

// Hanki nykyinen todennus
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

// Hanki käyttäjätunnus
String username = authentication.getName();

// Hanki valtuudet (roolit)
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();

// Tarkista, onko käyttäjällä tietty rooli
boolean isAdmin = authorities.stream()
.anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ROLE_ADMIN"));

SecurityContextHolder on Spring Securityn keskeinen mekanismi nykyisen käyttäjän todennustietojen hakemiseen. Se toimii koko sovelluksessasi, mukaan lukien webforJ-näkymien konstruktorit ja metodit.

Näytä käyttäjätiedot näkymissä

Pääset käyttäjätietoihin suoraan webforJ-näkymissä näyttämään henkilökohtaista sisältöä:

DashboardView.java
@Route("/dashboard")
@PermitAll
public class DashboardView extends Composite<Div> {
private final Div self = getBoundComponent();

public DashboardView() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = authentication.getName();

// Näytä käyttäjätiedot
H1 welcome = new H1("Tervetuloa, " + username + "!");

self.add(welcome);
}
}

Ehdollinen renderöinti roolien mukaan

Näytä tai piilota käyttöliittymän elementtejä käyttäjien roolien mukaan hallitaksesi, mitä ominaisuuksia käyttäjät näkevät:

DashboardView.java
@Route("/dashboard")
@PermitAll
public class DashboardView extends Composite<Div> {
private final Div self = getBoundComponent();

public DashboardView() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();

// Tarkista tietty rooli
boolean isAdmin = auth.getAuthorities().stream()
.anyMatch(a -> a.getAuthority().equals("ROLE_ADMIN"));

// Ehdollisesti lisää vain adminille tarkoitettu painike
if (isAdmin) {
Button adminPanel = new Button("Admin-paneeli");
adminPanel.onClick(e -> Router.getCurrent().navigate(AdminView.class));
self.add(adminPanel);
}
}
}