Keselamatan Spring dan Pengesahan JWT · Pelajaran

Pelaksanaan UserDetailsService Tersuai

Cipta `UserDetailsService` tersuai untuk memuatkan data khusus pengguna daripada stor data aplikasi anda bagi tujuan pengesahan.

Pelajaran 1 daripada 411 langkah

Pelaksanaan UserDetailsService Tersuai ialah pelajaran Keselamatan Spring dan Pengesahan JWT percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Keselamatan Spring dan Pengesahan JWT, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Keselamatan Spring dan Pengesahan JWT merangkumi sejumlah 4 pelajaran.

Melangkaui Pengguna Dalam Memori

Dalam pelajaran terdahulu, anda mungkin telah menggunakan pengguna dalam memori untuk pengesahan mudah. Ini bermakna nama pengguna dan kata laluan dikodkan terus dalam konfigurasi aplikasi anda.

Walaupun mudah untuk ujian, aplikasi sebenar perlu memuatkan data pengguna daripada sumber kekal seperti pangkalan data, LDAP atau perkhidmatan lain. Di sinilah perkhidmatan UserDetails tersuai diperlukan!

Antara Muka UserDetailsService

Spring Security menggunakan antara muka UserDetailsService untuk mendapatkan data khusus pengguna semasa pengesahan. Hanya satu kaedah yang perlu anda laksanakan:

  • UserDetails loadUserByUsername(String username)

Kaedah ini penting. Apabila pengguna cuba log masuk, Spring Security memanggil kaedah ini dan menghantar nama pengguna yang diberikan oleh pengguna tersebut.

Apakah UserDetails?

Kaedah loadUserByUsername mesti mengembalikan objek UserDetails. Antara muka ini mewakili maklumat pengguna yang telah disahkan, termasuk:

  • Nama pengguna
  • Kata laluan
  • Kuasa (peranan/keizinan)
  • Status akaun (contohnya, diaktifkan, dikunci, tamat tempoh)

Spring Security menyediakan pelaksanaan lalai yang dipanggil org.springframework.security.core.userdetails.User dan anda akan kerap menggunakannya.

Mencipta Perkhidmatan Tersuai Anda

Untuk mencipta perkhidmatan pengguna tersuai, anda hanya perlu mencipta kelas yang melaksanakan UserDetailsService. Di dalamnya, anda akan mengatasi kaedah loadUserByUsername.

Dalam kaedah ini, anda akan menulis logik untuk mendapatkan data pengguna daripada stor data pilihan anda. Buat masa ini, kita akan menggunakan beberapa contoh yang dikodkan terus.

Melaksanakan loadUserByUsername

Di dalam loadUserByUsername, anda akan melaksanakan langkah berikut:

  1. Terima username.
  2. Cari pengguna dalam sumber data anda.
  3. Jika ditemui, cipta objek UserDetails dengan butirannya (nama pengguna, kata laluan, peranan).
  4. Jika tidak ditemui, lemparkan UsernameNotFoundException.

Ingat, pengekodan kata laluan amat penting untuk keselamatan, tetapi kita akan membincangkannya dalam pelajaran kemudian. Buat masa ini, kita akan menggunakan awalan kata laluan teks biasa: {noop}.

Kod: UserDetailsService Asas

Mari lihat pelaksanaan ringkas. Contoh ini menetapkan pengguna secara terus, seolah-olah data diambil daripada sumber data. Jalankannya untuk melihat cara ia berfungsi!

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import java.util.Arrays;
import java.util.Collections;

class MyUserDetailsService implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // In a real app, you'd fetch user from a database
        if ("user".equals(username)) {
            return User.withUsername("user")
                       .password("{noop}password") // {noop} for plain text
                       .roles("USER")
                       .build();
        }
        if ("admin".equals(username)) {
            return User.withUsername("admin")
                       .password("{noop}adminpass")
                       .roles("ADMIN", "USER")
                       .build();
        }
        throw new UsernameNotFoundException("User not found: " + username);
    }
}

public class Main {
    public static void main(String[] args) {
        MyUserDetailsService service = new MyUserDetailsService();

        System.out.println("Attempting to load 'user'...");
        try {
            UserDetails user = service.loadUserByUsername("user");
            System.out.println("Loaded User: " + user.getUsername());
            System.out.println("Authorities: " + user.getAuthorities());
        } catch (UsernameNotFoundException e) {
            System.out.println(e.getMessage());
        }

        System.out.println("\nAttempting to load 'admin'...");
        try {
            UserDetails admin = service.loadUserByUsername("admin");
            System.out.println("Loaded Admin: " + admin.getUsername());
            System.out.println("Authorities: " + admin.getAuthorities());
        } catch (UsernameNotFoundException e) {
            System.out.println(e.getMessage());
        }

        System.out.println("\nAttempting to load 'unknown'...");
        try {
            service.loadUserByUsername("unknown");
        } catch (UsernameNotFoundException e) {
            System.out.println(e.getMessage());
        }
    }
}

Menambahkan Peranan dan Kuasa

Perhatikan bahawa dalam contoh tersebut, kita menggunakan .roles("USER") dan .roles("ADMIN", "USER").

  • Peranan ialah keizinan peringkat tinggi seperti 'ADMIN' atau 'USER'.
  • Peranan ini ditukar kepada objek GrantedAuthority oleh Spring Security.
  • Semasa membina objek UserDetails, anda menetapkan peranan/kuasa yang dimiliki oleh pengguna.

Kuasa ini kemudiannya digunakan oleh Spring Security untuk kebenaran (menentukan perkara yang boleh diakses oleh pengguna).

Mendaftarkan Perkhidmatan Anda

Selepas mencipta UserDetailsService tersuai, Spring Security perlu mengetahuinya. Dalam aplikasi Spring Boot, anda biasanya mendaftarkannya sebagai bean Spring.

Dengan hanya mentakrifkan perkhidmatan tersuai anda sebagai @Bean, konfigurasi automatik Spring Security biasanya akan mengesannya dan menggunakannya untuk pengesahan.

Aliran Pengesahan Tersuai

Beginilah cara pengesahan tersuai biasanya berfungsi dengan perkhidmatan anda:

  1. Pengguna menghantar kelayakan log masuk (nama pengguna, kata laluan).
  2. Spring Security menerima permintaan tersebut.
  3. Ia memanggil kaedah loadUserByUsername() milik UserDetailsService tersuai anda dengan nama pengguna yang diberikan.
  4. Kaedah anda mendapatkan data pengguna dan mengembalikan objek UserDetails.
  5. Spring Security kemudian membandingkan kata laluan yang diberikan dengan kata laluan daripada UserDetails (selepas pengekodan/penyahkodan).
  6. Jika sepadan, pengesahan berjaya!

Semak Pemahaman Anda

Pertimbangkan tujuan teras dan komponen pelaksanaan UserDetailsService tersuai.

Imbas Kembali: UserDetailsService Tersuai

Anda telah mempelajari cara melaksanakan UserDetailsService tersuai, iaitu komponen asas untuk pengesahan pengguna lanjutan dalam Spring Security:

  • Ia membolehkan data pengguna dimuatkan daripada mana-mana sumber.
  • Anda melaksanakan kaedah loadUserByUsername.
  • Kaedah ini mengembalikan objek UserDetails yang mengandungi kelayakan dan kuasa pengguna.
  • Ia penting untuk beralih daripada pengurusan pengguna dalam memori.

Seterusnya, kita akan mendalami cara melindungi kata laluan tersebut dengan pengekodan yang betul!

Percuma untuk bermula

Pelajari Java 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 “Pelaksanaan UserDetailsService Tersuai” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Keselamatan Spring dan Pengesahan JWT, termasuk “Pelaksanaan UserDetailsService Tersuai”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Keselamatan Spring dan Pengesahan JWT merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pelaksanaan UserDetailsService Tersuai”?

Cipta `UserDetailsService` tersuai untuk memuatkan data khusus pengguna daripada stor data aplikasi anda bagi tujuan pengesahan. Anda berlatih Keselamatan Spring dan Pengesahan JWT 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 Keselamatan Spring dan Pengesahan JWT?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Keselamatan Spring dan Pengesahan JWT 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 1 daripada 4.

Berapa lamakah pelajaran “Pelaksanaan UserDetailsService Tersuai” 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 Keselamatan Spring dan Pengesahan JWT ini?

Ya. Setiap pelajaran Keselamatan Spring dan Pengesahan JWT 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

  1. Pelaksanaan UserDetailsService Tersuai
  2. Memahami Pengekod Kata Laluan
  3. Integrasi Pengurusan Pengguna Pangkalan Data
  4. Kebenaran Berasaskan Peranan dengan Granted Authorities
← Kembali ke Keselamatan Spring dan Pengesahan JWT