Cara Mengautentikasi Pengguna Secara Manual dengan Keamanan Musim Semi

1. Ikhtisar

Dalam artikel singkat ini, kami akan fokus pada cara mengatur pengguna terautentikasi secara terprogram di Spring Security dan Spring MVC.

2. Keamanan Musim Semi

Sederhananya, Spring Security menyimpan informasi utama dari setiap pengguna yang diautentikasi dalam ThreadLocal - direpresentasikan sebagai objek Authentication .

Untuk membuat dan menyetel objek Authentication ini - kita perlu menggunakan pendekatan yang sama yang biasanya digunakan Spring Security untuk membuat objek pada autentikasi standar.

Untuk, mari kita picu otentikasi secara manual dan kemudian setel objek Otentikasi yang dihasilkan ke dalam SecurityContext saat ini yang digunakan oleh kerangka kerja untuk menampung pengguna yang saat ini masuk:

UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken(user, pass); Authentication auth = authManager.authenticate(authReq); SecurityContext sc = SecurityContextHolder.getContext(); sc.setAuthentication(auth);

Setelah menyetel Autentikasi dalam konteks, sekarang kami akan dapat memeriksa apakah pengguna saat ini diautentikasi - menggunakan securityContext.getAuthentication (). IsAuthenticated () .

3. Musim Semi MVC

Secara default, Keamanan Musim Semi menambahkan filter tambahan dalam rantai filter Keamanan Musim Semi - yang mampu mempertahankan Konteks Keamanan ( kelas SecurityContextPersistenceFilter ).

Pada gilirannya, ini mendelegasikan persistensi Konteks Keamanan ke sebuah instance dari SecurityContextRepository , dengan default ke kelas HttpSessionSecurityContextRepository .

Jadi, untuk mengatur otentikasi pada permintaan dan karenanya, membuatnya tersedia untuk semua permintaan berikutnya dari klien , kita perlu mengatur Konteks Keamanan yang berisi Otentikasi dalam sesi HTTP secara manual:

public void login(HttpServletRequest req, String user, String pass) { UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken(user, pass); Authentication auth = authManager.authenticate(authReq); SecurityContext sc = SecurityContextHolder.getContext(); sc.setAuthentication(auth); HttpSession session = req.getSession(true); session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, sc); }

SPRING_SECURITY_CONTEXT_KEY adalah HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY yang diimpor secara statis .

Perlu dicatat bahwa kita tidak bisa langsung menggunakan HttpSessionSecurityContextRepository - karena berfungsi bersama dengan SecurityContextPersistenceFilter.

Itu karena filter menggunakan repositori untuk memuat dan menyimpan konteks keamanan sebelum dan sesudah eksekusi sisa filter yang ditentukan dalam rantai, tetapi menggunakan pembungkus khusus atas respons yang diteruskan ke rantai.

Jadi dalam kasus ini, Anda harus mengetahui jenis kelas pembungkus yang digunakan dan meneruskannya ke metode penyimpanan yang sesuai di repositori.

4. Kesimpulan

Dalam tutorial singkat ini, kami membahas cara menyetel Autentikasi pengguna secara manual dalam konteks Keamanan Musim Semi dan cara membuatnya tersedia untuk tujuan MVC Musim Semi, dengan fokus pada sampel kode yang menggambarkan cara termudah untuk mencapainya.

Seperti biasa, contoh kode dapat ditemukan di GitHub.