Dieser Artikel ist eine Übersetzung des Spring Professional Certification Prep- Artikels.
Es wird das Thema Spring Security und die wichtigsten Fragen dazu behandeln.
Es kann auch verwendet werden, um sich auf ein Interview vorzubereiten.
↓ Weitere Artikel finden Sie unter den Links im Inhaltsverzeichnis ↓

Fragen selbst:
Was ist Authentifizierung und Autorisierung?Bei der Authentifizierung wird der Benutzer eines Computersystems überprüft.
So passiert es im Frühling:
- Das resultierende Kennwort und der Benutzername werden in eine Instanz von UsernamePasswordAuthenticationToken konvertiert. Es implementiert die Authentifizierungsschnittstelle .
- Das Token wird zur Überprüfung an das
AuthenticationManager
Objekt übergeben - Bei Erfolg gibt AM ein ausgefülltes
Authentication
- Der Sicherheitskontext wird durch Aufrufen von
SecurityContextHolder.getContext().setAuthentication(...)
Bei der Autorisierung wird überprüft, ob der Benutzer über die zum Ausführen einer Aktion erforderliche Rolle verfügt. Während der Autorisierung wird geprüft, ob Sie über die entsprechenden Rechte für den Zugriff auf die Ressource verfügen.
Prozess:
- Vom Auftraggeber wird die Rolle des Benutzers angezeigt
- Benutzerrolle gegen Ressourcenrolle geprüft
Zuerst erfolgt die Authentifizierung und dann die Authentifizierung.
Wie funktioniert Sicherheit intern?Verwenden von Spring AOP-Proxys, die von der AbstractSecurityInterceptor-Klasse erben.
Es wird für Methoden verwendet, die die Autorisierung aufrufen.
Die Sicherheits-Webinfrastruktur basiert auf Servlet-Filtern.
Der erste Schritt besteht darin, den Filter DelegatingFilterProxy
zu konfigurieren. Er delegiert die Anfrage an FilterChainProxy
.
FilterChainProxy
ist eine Bean, die eine oder mehrere SecurityFilterChain
im Konstruktor akzeptiert.
SeccurityFilterChain
vergleicht die URL in der Anforderung mit einer Liste von Filtern.

Hauptmerkmale von Spring SecuritySecurityContextHolder
- enthält und bietet Zugriff auf den SecurityContext in der Anwendung.
SecurityContext
- Die Standardimplementierung von Spring Security, die das Authentifizierungsobjekt enthält.
Authentication
- Stellt ein Token für eine Authentifizierungsanforderung oder für einen Principal bereit, der sich authentifiziert hat. Es enthält auch eine Liste der Befugnisse, auf die der Auftraggeber Zugriff hat.
GrantedAuthority
- Enthält die Berechtigung, die dem GrantedAuthority
Principal erteilt wurde.
UserDetails
- enthält Informationen zum Benutzer: Passwort, Login, Berechtigungen. Diese Informationen werden verwendet, um nach erfolgreicher Authentifizierung ein Authentifizierungsobjekt zu erstellen.
UserDetailsService
- Dieser Service extrahiert Informationen über den Benutzer aus dem Repository (Programmspeicher, Datenbank usw.) und fügt sie in UserDetails ein.
Was ist ein Delegate-Proxy-Filter?Die DelegatingFilterProxy
Klasse ist eine Klasse, die die Schnittstelle javax.Servlet.Filter
implementiert.
Dies ist ein spezieller Filter, der die Arbeit an andere Beans delegiert, die ebenfalls Filter sind.
Was ist eine Sicherheitsfilterkette?Die Filterkette implementiert die SecurityFilterChain
Schnittstelle. Die von Spring Security bereitgestellte Implementierung lautet DefaultSecurityFilterChain.
Der DSFC-Konstruktor akzeptiert mehrere Parameter. Der erste Parameter ist Request Matcher. Die übrigen Parameter sind Filter, die die Servlet.Filter-Schnittstelle implementieren. Hier sind alle von DSFC akzeptierten Filter:
ChannelProcessingFilter
SecurityContextPersistenceFilter
ConcurrentSessionFilter
- Beliebige Authentifizierung. Filter:
UserNamePasswordAuthenticationFilter
/ CasAythenticationFilter
/ BasicAuthenticationFilter
SecurityContextHolderAwareRequestFilter
JaasApiIntegrationFilter
RemeberMeAuthenticationFilter
AnonymusAuthenticationFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
Was ist ein Sicherheitskontext?Das primäre Objekt ist ein SecurityContextHolder
. Hier werden Details zum aktuellen Sicherheitskontext gespeichert, z. B. Details zum Principal, der die Anwendung derzeit verwendet. Standardmäßig wird ThreadLocal
für die Speicherung verwendet.
Das von der Methode getContext()
Objekt ist SecurityContext
. Sie können ein Authentication
empfangen und einrichten.
Authentication
stellt die folgenden Eigenschaften dar:
- Die Sammlung von Befugnissen, die dem Auftraggeber gewährt wurden
- Daten zur Benutzeridentifikation (Login, Passwort)
- Details - hinzufügen. Informationen, falls erforderlich. Kann null sein
- Auftraggeber
- Authentifizierungsflag - Boolesche Variable, die angibt, ob der Principal den Test erfolgreich bestanden hat
Wie stelle ich ein Benutzer-Klick-Abfangen bei bestimmten URLs ein? @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests()
Was bedeutet * in den Methoden antMatchers und mvcMatchers ()?Dieser Ausdruck bedeutet "beliebig".
Es gibt 2 Arten:
*
- fängt nur auf der Ebene ab, auf der es verwendet wird.
Das Muster "/ orders / *" überprüft beispielsweise die Rechte des Benutzers, wenn der Benutzer folgt
/ Befehle / Außerirdische oder / Befehle / 1, aber nicht / Befehle / Außerirdischer / 1.
**
- Abschnitte auf allen Ebenen.
Alle Anfragen werden geprüft, / Bestellungen / Aliens, / Bestellungen / 1, / Bestellungen / Alien / 1.
Warum ist mvcMatcher sicherer als antMatcher?Weil antMatcher(“/service”)
den Anforderungspfad nur “/service”
mvcMatcher(“/service”)
, während mvcMatcher(“/service”)
“/service”
, “/service.html”
, "/service.abc" zuordnet. .
Unterstützt Spring das Passwort-Hashing? Was ist Salz?Ja, das tut es. Es gibt eine PasswordEncoder
Schnittstelle für das Hashing, die nur eine Methode enthält:
static PasswordEncoder createDelegatingPasswordEncoder()
, der den Standard- DelegatePasswordEncoder
zurückgibt.
Salt wird verwendet, um den Passwort-Hash-Wert zu berechnen. Dies ist eine Folge von Zufallszahlen, mit denen ein Textkennwort in einen Hash konvertiert wird. Das Salt wird in klarer Form neben dem Hash-Passwort gespeichert und kann später verwendet werden, wenn ein sauberes Passwort mit einem neuen Benutzer-Login in einen Hash konvertiert wird.
Warum brauchen Sie Schutz für Methoden? Wie installiere ich es?Spring Security unterstützt den Schutz einzelner Methoden in Beans (z. B. in Controllern). Dies ist eine zusätzliche Schutzschicht für die Anwendung.
Sie muss explizit mit der Annotation @EnableGlobalMethodSecurity
angegeben werden.
Was macht die Annotation @RolesAllowed?Diese Anmerkung basiert auf dem JSR-250.
@RolesAllowed
können Sie den Zugriff auf Methoden (z. B. in der Controller-Klasse) mithilfe von Rollen konfigurieren.
Beispiel: @RolesAllowed(“ADMIN”)
erlaubt nur Benutzern mit der ADMIN
Rolle
Zur Verwendung müssen Sie @EnableGlobalMethodSecurity(jsr250Enabled=true)
für die @ Configuration-Klasse festlegen. + Diese Annotation muss sich im Klassenpfad befinden.
Erzählen Sie uns von @PreAuthorize@PreAuthorize
können Sie den Zugriff auf die Methode mit SpEL konfigurieren.
Zur Verwendung müssen Sie @EnableGlobalMethodSecurity(prePostEnabled=true)
Wie werden all diese Anmerkungen implementiert?Die End-to-End-Funktionalität wird mithilfe von Spring AOP (Proxy-Objekten) verwendet.