Pengurusan Sesi Pengguna
Laksanakan pengurusan sesi pengguna lanjutan bagi WebSockets dengan memautkan sesi HTTP kepada sesi WebSocket.
Pengurusan Sesi Pengguna ialah pelajaran WebSockets dan Sistem Masa Nyata dengan Spring percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran WebSockets dan Sistem Masa Nyata dengan Spring, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus WebSockets dan Sistem Masa Nyata dengan Spring merangkumi sejumlah 4 pelajaran.
Memahami Sesi Pengguna
Dalam aplikasi web, "sesi" membantu pelayan mengingati pengguna merentas beberapa permintaan. Ia seperti ingatan sementara untuk setiap pengguna.
Untuk HTTP tradisional, sesi biasanya diuruskan menggunakan kuki. Sesi membolehkan anda menyimpan data khusus pengguna, seperti status log masuk atau item dalam troli, antara pemuatan halaman.
WebSockets: Cabaran Sesi
Tidak seperti HTTP, WebSockets mewujudkan sambungan berterusan dan dupleks penuh. Sambungan ini tidak membawa konteks sesi yang sama seperti permintaan HTTP secara semula jadi.
Ini bermakna jika pengguna log masuk melalui HTTP dan kemudian membuka WebSocket, sambungan WebSocket itu tidak akan mengetahui identiti pengguna secara automatik tanpa persediaan khusus.
- Sesi HTTP: Berjangka pendek, respons permintaan.
- Sesi WebSocket: Sambungan jangka panjang dan berterusan.
Menghubungkan Sesi HTTP & WebSocket
Untuk membina aplikasi masa nyata yang kaya dengan ciri, anda selalunya perlu memastikan sambungan WebSocket mengetahui konteks sesi HTTP pengguna.
Contohnya, anda mungkin perlu mengetahui sama ada pengguna telah disahkan, ID pengguna mereka atau butiran profil lain yang ditetapkan semasa log masuk HTTP awal.
Spring menyediakan mekanisme untuk "merapatkan" jurang ini semasa jabat tangan WebSocket.
Pemintas Jabat Tangan
Alat utama Spring untuk menghubungkan sesi HTTP dan WebSocket ialah HttpSessionHandshakeInterceptor.
Pemintas ini berjalan semasa jabat tangan WebSocket, iaitu permintaan HTTP awal yang dinaik taraf kepada sambungan WebSocket. Pemintas ini boleh menyalin atribut daripada sesi HTTP semasa ke sesi WebSocket.
- Fungsinya: Menyalin atribut sesi HTTP.
- Masa pelaksanaan: Semasa jabat tangan WebSocket.
Mengkonfigurasi Pemintas Sesi
Untuk menggunakan HttpSessionHandshakeInterceptor, anda perlu mendaftarkannya dalam konfigurasi WebSocket anda. Ini memberitahu Spring supaya menggunakan pemintas tersebut apabila sambungan WebSocket sedang diwujudkan.
Biasanya, pemintas ini ditambahkan dalam pelaksanaan WebSocketMessageBrokerConfigurer anda:
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.addInterceptors(new HttpSessionHandshakeInterceptor())
.withSockJS();
}
}Mengakses Data Sesi Terpaut
Setelah HttpSessionHandshakeInterceptor selesai menjalankan tugasnya, anda boleh mengakses atribut sesi HTTP yang disalin dalam pengendali mesej WebSocket anda.
Lazimnya, anda ingin mengakses Principal (yang mewakili pengguna yang disahkan) atau atribut tersuai lain yang anda simpan dalam sesi HTTP.
@Controller
public class MyWebSocketController {
@MessageMapping("/hello")
public void handleMessage(@Payload String message, Principal principal) {
String username = principal.getName();
System.out.println("Message from " + username + ": " + message);
// ... use username for user-specific logic
}
}Data Khusus WebSocket
Selain menyalin data sesi HTTP, anda juga boleh menyimpan maklumat secara terus dalam WebSocketSession itu sendiri. Data ini khusus untuk sambungan WebSocket tersebut.
Ini berguna untuk mengurus keadaan khusus sambungan, seperti bilik sembang semasa pengguna, keutamaan pemberitahuan untuk sambungan ini atau data sementara yang lain.
@EventListener
public void handleSessionConnect(SessionConnectedEvent event) {
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(event.getMessage());
WebSocketSession session = (WebSocketSession) accessor.getSessionAttributes().get("webSocketSession");
if (session != null) {
session.getAttributes().put("customKey", "customValue");
}
System.out.println("User connected: " + accessor.getUser().getName());
}Mengurus Kitar Hayat Sesi
Spring membolehkan anda mendengar peristiwa kitar hayat sesi WebSocket. Ini penting untuk membersihkan sumber atau mengemas kini status pengguna apabila sambungan diwujudkan atau ditutup.
Anda boleh menggunakan @EventListener bersama-sama SessionConnectedEvent dan SessionDisconnectEvent untuk bertindak balas terhadap perubahan ini.
SessionConnectedEvent: Dicetuskan apabila sesi STOMP baharu diwujudkan.SessionDisconnectEvent: Dicetuskan apabila sesi STOMP ditutup.
Boleh Dijalankan: Pemintas Jabat Tangan
Contoh Spring Boot ini mengkonfigurasi titik akhir WebSocket dengan HttpSessionHandshakeInterceptor. Apabila klien bersambung, pemintas tersebut membantu menghubungkan sesi HTTP (jika ada) dengan sesi WebSocket.
Kami menunjukkan pengendali mesej ringkas yang boleh mengakses Principal pengguna yang disahkan. Jika Spring Security didayakan, principal.getName() akan mengembalikan nama pengguna yang telah log masuk.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.stereotype.Controller;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
import java.security.Principal;
@SpringBootApplication
@EnableWebSocketMessageBroker
public class WebSocketSessionApp {
public static void main(String[] args) {
SpringApplication.run(WebSocketSessionApp.class, args);
}
@Configuration
public static class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.addInterceptors(new HttpSessionHandshakeInterceptor())
.withSockJS();
}
}
@Controller
public static class WebSocketGreetingController {
@MessageMapping("/hello")
public void greeting(Principal principal) {
if (principal != null) {
System.out.println("Message from authenticated user: " + principal.getName());
} else {
System.out.println("Message from unauthenticated user (Principal is null).");
}
}
}
}Semakan Pantas: Pemintas Jabat Tangan
Uji pemahaman anda tentang HttpSessionHandshakeInterceptor.
Imbas Kembali: Pengurusan Sesi
Kami telah meneroka cara mengurus sesi pengguna dalam aplikasi Spring WebSocket, khususnya cara menghubungkan konteks sesi HTTP dengan sesi WebSocket.
HttpSessionHandshakeInterceptorpenting untuk menyalin atribut sesi HTTP semasa jabat tangan.- Anda boleh mengakses maklumat pengguna yang disahkan (
Principal) dalam pengendali WebSocket. @EventListenermembantu mengurus peristiwa sambungan dan pemutusan sambungan.
Pengurusan sesi yang betul memastikan ciri masa nyata anda diperibadikan dan selamat untuk setiap pengguna.
Pelajari WebSockets dan Sistem Masa Nyata dengan Spring dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Pengurusan Sesi Pengguna” percuma?
Ya — teks penuh “Pengurusan Sesi Pengguna” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus WebSockets dan Sistem Masa Nyata dengan Spring, tingkat taraf kepada CoddyKit PRO. Kursus WebSockets dan Sistem Masa Nyata dengan Spring merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengurusan Sesi Pengguna”?
Laksanakan pengurusan sesi pengguna lanjutan bagi WebSockets dengan memautkan sesi HTTP kepada sesi WebSocket. Anda berlatih WebSockets dan Sistem Masa Nyata dengan Spring menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan WebSockets dan Sistem Masa Nyata dengan Spring?
Tiada pengalaman terdahulu diperlukan. Pembelajaran WebSockets dan Sistem Masa Nyata dengan Spring di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Pengurusan Sesi Pengguna” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran WebSockets dan Sistem Masa Nyata dengan Spring ini?
Ya. Setiap pelajaran WebSockets dan Sistem Masa Nyata dengan Spring menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pencegat WebSocket
- Penyesuaian Penukar Mesej
- Pengurusan Sesi Pengguna
- Pemesejan Bersasar kepada Pengguna Tertentu