Skenario Aplikasi
Baru -baru ini, selalu ada orang di komunitas yang telah memposting artikel dengan iklan kecil, yang secara serius mempengaruhi suasana masyarakat. Saya sangat marah! Untuk jenis pengguna ini, itu harus diblokir secara permanen!
Kerangka keamanan masyarakat menggunakan keamanan musim semi dan sesi musim semi, dan status login berlaku selama 30 hari. Informasi sesi ada di Redis. Bagaimana cara menangani pengguna yang tidak jujur ini dengan anggun?
Pertama, cukup bagi izin pengguna:
Kemudian, blokir pengguna yang ditentukan (role_user -> role_black) dan paksa pengguna untuk keluar (hapus informasi sesi pengguna di redis).
Ketergantungan dan konfigurasi terkait proyek
Ketergantungan Maven
<!-Security-> <dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-security </arttifactid> </dependency> <!-redis-> <trupcact> org.springframework.boot </groupid> <RoRPACTID> </Dependency> <!-Spring Session Redis-> <dependency> <GroupId> org.springframework.Session </groupid> <ArTifactId> Spring-sesion-data-redis </artifactid> </dependensi>
Aplikasi Konfigurasi Kebijakan Sesi Musim Semi.yml
# oMit redis koneksi terkait konfigurasi di sini pegas: sesi: tipe toko: redis
Sampel kode konfigurasi keamanan musim semi
@EnableWebSecurityPublic kelas WebSecurityConfig memperluas WebSecurityConfigurerAdapter {@Override void configure (httpsecurity http) melempar Exception {http .AuthorizeRequests () .Antmatchers ("/user/**"). Authenticated () .Antmatchers ("/user/**"). Authenticated () .Antmatchers ("/user/**"). Authenticated (). .AntMatchers ("/Manager/**"). HASANYROLE (roleenum.Manager.getMessage ()) .AnyRequest (). Permitall () .and (). FormLogin (). LoginPage ("/Login"). Permitall () .and (). Logout (). }}Exit Paksa Tetapkan ke Antarmuka Pengguna
Impor com.spring4all.bean.responseBean; impor com.spring4all.service.userservice; impor lombok.allargsconstructor; impor org.springframework.session.findbyIndexnamessiessionRepository; impor org.springframework.sesession.sesesion; org.springframework.session.data.redis.redisoperationssessessionRepository; impor org.springframework.web.bind.annotation.getmapping; impor org.springframework org.springframework.web.bind.annotation.RestController; import java.util.arraylist; import java.util.list; java.util.map;@restcontroller@allrargsconstructorpublic uberManageApi {private findbyindexnames {private findbyIndexnames {private findbyIndexnamons Perpanjakan sesi> sessionrepository; redisoperations final privateRepository redisoperationssessessionRepository; UserServer UserServer UserService Pribadi; /*** Kelola logout dari pengguna yang ditentukan* @param Userid ID pengguna* @return Informasi sesi pengguna*/@preauthorize ("hasroLe ('manager')") @getMapping ("/manager/logout/{UserId}") everical everical nide (@pathvariable () long userid) {//public -nya, @pathvariable () long userid) {//public -nya, @@pathvariable () long userid) {//public prinsip public -nya () long Userid neubername () long Userid) {//oubern -nya prinsip public -nya () long Userid neubeSe) untuk mengimplementasikan string indexName = UserserVice.getPrincipalNameIndexName (UserId); // query Informasi sesi pengguna, kunci nilai pengembalian adalah peta sesi <string ,? Extends Session> Usersessions = sessionRepository.findbyIndexNeAndexValue (findByIndexNamesessionRepository.principal_name_index_name, indexName); // Hapus Daftar Informasi Sesi Pengguna <String> sessionIds = ArrayList baru <> (Usersessions.Keyset ()); untuk (sesi string: sessionIds) {redisoperationsSessionRepository.deletebyid (session); } return responseBean.success (Usersessions); }} Deskripsi IndexName adalah nilai pengembalian principal.getName ().
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.