Keamanan Musim Semi Ingat prinsip -prinsip dasar saya:
Saat masuk, permintaan dikirim ke filter usernepasswordAuthenticationFilter. Ketika filter berhasil diautentikasi, RememberMeService akan dipanggil, yang akan menghasilkan token, tulis token ke cookie browser. Pada saat yang sama, ada tokenRepository di RememberMeService, yang menulis informasi token dan pengguna ke database. Dengan cara ini, ketika pengguna mengakses sistem lagi dan mengakses antarmuka, itu akan melewati filter RememberMeAuthenticationFilter. Ini akan membaca token di cookie dan menyerahkannya ke Rememberservice. Rememberservice akan menggunakan tokenRepository untuk memeriksa apakah ada catatan dari database berdasarkan token. Jika ada catatan, nama pengguna akan dikeluarkan, dan kemudian hubungi UserDetailService untuk mendapatkan informasi pengguna berdasarkan nama pengguna, dan kemudian letakkan di SecurityContext.
RememberMeAuthenticationFilter mengotentikasi posisi filter kedua terakhir dari rantai filter dalam keamanan musim semi. Ketika tidak ada filter otentikasi lain yang berhasil diautentikasi, RememberMeAuthenticationFilter akan dipanggil untuk mencoba otentikasi.
menyelesaikan:
1. Tambahkan <input type="checkbox" name="remember-me" value="true"/> ke formulir login, Springsecurity mendefinisikan konstan di kelas SpringSessionRememberMeServices , dan nilai default adalah Remember-Me
2. Menurut diagram skematik di atas, Anda perlu mengkonfigurasi tokenRepository dan menyimpan token yang dihasilkan ke dalam database. Ini adalah konfigurasi konfigurasi kacang dan ditempatkan di browserSecurityConfig
3. Configure in Configure
4. Tambahkan waktu login otomatis ke browserproperties untuk membuat saya dapat dikonfigurasi
// Ingat saya untuk mengkonfigurasi int pribadi RememberMeseconds = 10; paket Qihuo com.imooc.s@configuration // Ini adalah konfigurasi kelas publik browserSecurityConfig memperluas WebSecurityConfigurerAdapter {// Baca Konfigurasi Halaman Login dari Konfigurasi Pengguna @Autowired Private SecurityProperties SecurityProperTers SecurityPropert; // prosesor yang disesuaikan setelah login yang berhasil @Autowired swasta authenticationuccesshandler imoocauthenticationuccesshandler; // prosesor yang disesuaikan setelah otentikasi gagal @Autowired private authenticationFailureHandler ImoocAuthenticationFailureHandler; // sumber data @Autowired Private DataSource DataSource; @Autowired private userDetailsService userDetailsService; // Perhatikan bahwa itu adalah org.springframework.security.crypto.password.passwordencoder @Bean Public PasswordEncoder PasswordDencoder () {// bcryptpasswordEncoder mengimplementasikan Kata Sandi Return BcryptpasswordEncoder (); } / *** Ingat konfigurasi tokenRepository saya, jalankan setelah login berhasil* setelah login berhasil, simpan token di database* @description: ingat konfigurasi tokenRepository saya* @param @return jdbctokenoryImpl* @return persistenttokository* @trowsurn* @browseuteutoryMpl* @return persistentTrepository* @throws* @hrows* @hrowsore* @return @return @throwse* @hrowse* @hrowse* PersistenttokenRepository PersistenttokenRepository () {JDBCtoKenRepositoryImpl JDBCtoKenRepository = new jdbCtokenrepositoryImpl (); jdbCtokenRepository.setDataSource (DataSource); // Tabel yang sesuai secara otomatis dihasilkan saat startup. Anda dapat menjalankan skrip create_table_sql sendiri di jdbctokenrepositoryImpl untuk menghasilkan tabel jdbctokenrepository.setCreateTableSstartup (true); return jdbctokenrepository; } // Versi 2: Halaman login yang dapat dikonfigurasi @Override Protected void configure (httpsecurity http) melempar pengecualian {// kode verifikasi filter validateCodefilter validateCodefilter = new validateCodefilter (); // Gunakan penanganan kesalahan Anda sendiri di filter kode verifikasi validateCodefilter.setAuthenticationFailureHandler (imoocauthenticationFailureHandler); // Kode verifikasi yang dikonfigurasi URL ValidateCodefilter.SetsecurityProperties (SecurityProperties); validateCodefilter.afterpropertiesset (); // Menerapkan Login Formulir Lompatan Antarmuka yang membutuhkan otentikasi, keamanan = otentikasi + otorisasi //http.httpbasic () // Ini adalah otentikasi kotak pop-up default // http // memuat kode verifikasi sebelum login filter. configuration.formlogin () .loginpage ("/otentikasi/membutuhkan") // memproses otentikasi pengguna browserSecurityController // login filter usernepasswordAuthenticationfilter URL login default adalah "/login", yang dapat diubah di sini. .successhandler (imoocauthenticationsuccesshandler) // otentikasi khusus postprocessor.failureHandler (imoocauthenticationFailureHandler) // pemrosesan setelah login gagal. TokenValiditySeconds (SecurityProperties.GetBrowser (). GetRememberMeseconds ()) // Ingat saya Seconds.userdetailsService (UserDetailsService) // Ingat setelah saya berhasil, call ouchinssquice untuk menanyakan informasi pengguna. SecurityProperties.getBrowser (). getLogInpage (): Pengguna yang dikonfigurasi halaman login. //Anyrequest.authenticated () // Otentikasi otentikasi diperlukan.and () .csrf (). Disable () // tutup perlindungan CSRF; }} Curity.Browser;Karena Anda ingin berurusan dengan database, Anda perlu menyuntikkan sumber data: application.properties
spring.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: //127.0.0.1: 3306/imooc-demospring.datasource.username = rootspring.datasorc.passe.dataSource.username = roothing.dataRce.datasce
Mulai aplikasi, akses localhost: 8080/pengguna, dan login diperlukan
Login berhasil:
Database: Hasilkan tabel persistent_logins dan simpan sepotong data
Hentikan Layanan dan mulai lagi (Komentari jdbcTokenRepository.setCreateTableOnStartup(true); ) karena informasi login pengguna kami sedang dalam sesi, setelah memulai kembali layanan, Anda harus reboot ke halaman login, tetapi karena saya telah mengonfigurasi untuk mengingat saya, saya dapat langsung mengakses dan mendapatkan data antarmuka.
Header permintaan:
Sejauh ini, pengingat dasar telah dilakukan
Kode lengkap ditempatkan di github: https://github.com/lhy1234/spring-security
Meringkaskan
Di atas adalah layanan istirahat konstruksi keamanan musim semi yang diperkenalkan editor kepada Anda. Ingat saya. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!