Integration med Spring Security
Integrer Spring Security for at beskytte WebSocket-forbindelser og meddelelsesflows.
Integration med Spring Security er en gratis WebSockets og realtidssystemer med Spring-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i WebSockets og realtidssystemer med Spring, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. WebSockets og realtidssystemer med Spring-kurset indeholder 4 lektioner i alt.
Sikr dine realtidsapplikationer
Det er spændende at integrere realtidsfunktioner som WebSockets i dine applikationer, men sikkerhed er altafgørende. Ligesom traditionelle HTTP-endepunkter skal dine WebSocket-forbindelser og meddelelsesforløb beskyttes.
- Dataintegritet: Forhindr uautoriseret ændring af meddelelser.
- Fortrolighed: Sørg for, at kun autoriserede brugere kan læse følsomme data.
- Adgangskontrol: Bestem, hvem der kan oprette forbindelse, sende meddelelser eller abonnere på emner.
Spring Security tilbyder et effektivt framework til at sikre dine WebSocket-endepunkter.
Vigtige sikkerhedsafhængigheder
For at begynde at sikre din Spring WebSocket-applikation skal du føje de nødvendige Spring Security-afhængigheder til dit projekt. Hvis du bruger Spring Boot, er det typisk enkelt.
Du skal primært bruge:
spring-boot-starter-security: Leverer de centrale Spring Security-funktioner.spring-security-messaging: Specifikt til sikring af Springs meddelelsesinfrastruktur, herunder WebSockets og STOMP.
Hvis du brugte Spring Initializr, skal du sikre dig, at disse er inkluderet i din pom.xml (Maven) eller build.gradle (Gradle).
Grundlag for HTTP-sikkerhed
WebSocket-forbindelser starter typisk med et HTTP-handshake. Det betyder, at din eksisterende HTTP-sikkerhedskonfiguration i Spring Security danner grundlaget for WebSocket-sikkerheden.
Før meddelelser sendes over WebSockets, bliver brugeren normalt godkendt via en almindelig HTTP-loginproces. Spring Security bruger derefter denne godkendte session til at sikre efterfølgende WebSocket-interaktioner. En minimal HTTP-sikkerhedsopsætning kan se sådan ud:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
.formLogin(withDefaults());
return http.build();
}Det sikrer, at alle HTTP-anmodninger kræver godkendelse, hvilket er afgørende for WebSocket-handshaket.
Aktivér WebSocket-sikkerhed
Når du har etableret din grundlæggende HTTP-sikkerhed, skal du fortælle Spring Security, at den skal sikre dine WebSocket-meddelelser. Det gør du ved at tilføje annotationen @EnableWebSocketSecurity.
Du placerer typisk denne annotation på en konfigurationsklasse, der udvider WebSocketMessageBrokerConfigurer. Det giver dig mulighed for at tilpasse både WebSocket-meddelelsesbrokerens indstillinger og sikkerhedsreglerne i én konfiguration.
Annotationen @EnableWebSocketSecurity aktiverer Spring Securitys meddelelsesbaserede autorisation for STOMP-meddelelser, så du kan definere detaljeret adgangskontrol.
Beskyt STOMP-destinationer
Spring Security integreres med STOMP-protokollen, så du kan sikre specifikke meddelelsesdestinationer. Det gør du ved at tilsidesætte metoden configureInbound() i din WebSocketMessageBrokerConfigurer.
Inde i denne metode bruger du en MessageSecurityMetadataSourceRegistry til at definere regler baseret på destinationsmønstre:
.simpDestMatchers("/app/private-chat").authenticated(): Kun godkendte brugere kan sende meddelelser til denne destination..simpDestMatchers("/topic/admin-updates").hasRole("ADMIN"): Kun brugere med rollen 'ADMIN' kan abonnere på dette emne.
Det giver en effektiv, URL-lignende sikkerhed for dine realtidsmeddelelser.
Brugeridentitet i WebSockets
En vigtig fordel ved at integrere Spring Security er måden, det håndterer brugergodkendelse på. Når en bruger opretter forbindelse til et WebSocket-endepunkt efter at være blevet godkendt via HTTP, knytter Spring Security automatisk brugerens Principal (brugeridentitet) til WebSocket-sessionen.
Det betyder, at alle sikkerhedsregler, du definerer for WebSocket-meddelelser, kan bruge den samme godkendelses- og autorisationskontekst som dine almindelige HTTP-anmodninger. Du behøver ikke godkende brugerne igen separat til WebSockets.
Objektet Principal er tilgængeligt i WebSocket-sessionen, så du kan træffe autorisationsbeslutninger baseret på den godkendte brugers roller eller oplysninger.
Styr afsendelse af meddelelser
Du kan definere autorisationsregler for meddelelser, som klienter sender til serveren (f.eks. publicering til en /app-destination). Det gør du ved hjælp af .simpMessageSending() i MessageSecurityMetadataSourceRegistry.
Hvis du f.eks. kun vil tillade godkendte brugere at sende meddelelser:
messages.simpMessageSending().authenticated();Eller hvis afsendelsen skal begrænses til en bestemt rolle:
messages.simpMessageSending().hasRole("USER");Det sikrer, at kun autoriserede klienter kan publicere meddelelser til din applikations interne handlere.
Begræns abonnementer
Det er lige så vigtigt at styre, hvem der kan abonnere på et bestemt emne. Du kan bruge .simpSubscribe() i MessageSecurityMetadataRegistry til at anvende autorisationsregler på abonnementsanmodninger.
Du kan for eksempel tillade alle at abonnere på et offentligt emne, men kun administratorer på et privat emne:
messages
.simpSubscribeDestMatchers("/topic/public").permitAll()
.simpSubscribeDestMatchers("/topic/private-admin").hasRole("ADMIN");Det forhindrer uautoriserede brugere i at modtage meddelelser, der er beregnet til bestemte grupper eller roller.
Eksempel: Sikring af destinationer
Lad os se på en minimal Spring Boot-applikation, der integrerer Spring Security for at beskytte WebSocket-STOMP-destinationer. Dette eksempel definerer forskellige adgangsregler for offentlige kanaler, administratorkanaler og kanaler, der kun er tilgængelige for godkendte brugere.
Når denne applikation starter, aktiverer den WebSocket-sikkerhed og konfigurerer regler for afsendelse og abonnement på bestemte stier. I en rigtig applikation skal du også bruge en HTTP-sikkerhedskonfiguration (som nævnt i Scene 3) og en brugertjeneste til godkendelse.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.messaging.MessageSecurityMetadataSourceRegistry;
import org.springframework.security.config.annotation.web.socket.EnableWebSocketSecurity;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
@SpringBootApplication
@EnableWebSocketMessageBroker // Enables STOMP over WebSockets
@EnableWebSocketSecurity // Enables Spring Security for WebSocket messages
@Configuration
public class Main implements WebSocketMessageBrokerConfigurer {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
System.out.println("WebSocket Security Demo Started!");
System.out.println("Access at ws://localhost:8080/ws");
}
// Configure STOMP endpoints (e.g., /ws)
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
// Configure message broker (e.g., /topic, /app)
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic", "/queue");
registry.setApplicationDestinationPrefixes("/app");
}
// Configure message security rules for inbound messages
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages
// Allow anyone to subscribe to /topic/public
.simpSubscribeDestMatchers("/topic/public").permitAll()
// Only ADMIN role can subscribe to /topic/admin
.simpSubscribeDestMatchers("/topic/admin").hasRole("ADMIN")
// Authenticated users can send messages to /app/private
.simpDestMatchers("/app/private").authenticated()
// Deny all other message types/destinations by default
.anyMessage().denyAll();
}
}Konfigurér adgang
Forestil dig, at du bygger en realtidsapplikation med chatrum. Du skal konfigurere følgende sikkerhedsregler for dine STOMP-meddelelser:
- Klienter må kun sende meddelelser til
/app/general-chat, hvis de er godkendt. - Kun brugere med rollen
MODERATORmå abonnere på/topic/moderator-alerts. - Alle andre meddelelsestyper eller destinationer, der ikke udtrykkeligt er tilladt, skal som standard afvises.
Hvilke Spring Security-regler vil du anvende blandt indstillingerne nedenfor?
Opsummering: Sikr dine realtidsapplikationer
Du har lært, hvordan du integrerer Spring Security med dine WebSocket-applikationer for at beskytte realtidskommunikation. Her er en kort opsummering:
- Tilføj afhængighederne
spring-boot-starter-securityogspring-security-messaging. - Sørg for, at der findes en grundlæggende HTTP-sikkerhedskonfiguration, da WebSocket-sikkerheden bygger på den.
- Brug
@EnableWebSocketSecuritytil at aktivere sikkerhed på meddelelsesniveau. - Tilsidesæt
configureInbound()iWebSocketMessageBrokerConfigurerfor at definere regler. - Brug
MessageSecurityMetadataSourceRegistrysammen med.simpDestMatchers(),.simpMessageSending()og.simpSubscribeDestMatchers()til at anvende autorisation. - Brug
.authenticated(),.hasRole()og.permitAll()sammen med.anyMessage().denyAll()for en robust sikkerhedsprofil.
Ved at følge disse trin kan du sikre, at dine realtidsapplikationer er sikre og pålidelige!
Lær WebSockets og realtidssystemer med Spring med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Integration med Spring Security” gratis?
Ja — hele teksten til “Integration med Spring Security” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af WebSockets og realtidssystemer med Spring-kurset, skal du opgradere til CoddyKit PRO. WebSockets og realtidssystemer med Spring-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Integration med Spring Security”?
Integrer Spring Security for at beskytte WebSocket-forbindelser og meddelelsesflows. Du øver dig i WebSockets og realtidssystemer med Spring med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på WebSockets og realtidssystemer med Spring?
Der kræves ingen tidligere erfaring. WebSockets og realtidssystemer med Spring på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Integration med Spring Security”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne WebSockets og realtidssystemer med Spring-lektion?
Ja. Alle WebSockets og realtidssystemer med Spring-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Sikkerhedsudfordringer ved WebSockets
- Integration med Spring Security
- Autentificering og autorisation
- Kryptering af trafik med TLS og wss://