Scénarios d'application
Récemment, il y a toujours des gens dans la communauté qui ont publié des articles avec de petites publicités, ce qui affecte sérieusement l'atmosphère communautaire. Je suis tellement en colère! Pour ce type d'utilisateur, il doit être bloqué de façon permanente!
Le cadre de sécurité de la communauté utilise la sécurité printanière et la session printanière, et le statut de connexion est valable pendant 30 jours. Les informations de session existent dans Redis. Comment gérer ces utilisateurs malhonnêtes gracieusement?
Tout d'abord, divisez simplement les autorisations de l'utilisateur:
Ensuite, bloquez l'utilisateur spécifié (Role_User -> Role_Black) et forcez l'utilisateur à quitter (supprimez les informations de session de l'utilisateur dans Redis).
Dépendances et configuration liées au projet
Dépendances Maven
<! - Security -> <Dedency> <GroupId> org.springframework.boot </proupId> <Artifactid> printemps-boot-starter-security </ artifactid> </dependency> <! - Redis -> <Dedency> <ProupId> org.springframework.boot </proupId> <Artifactisid> Spring-boot-data-Data-Frea </Dependency> <! - Spring Session Redis -> <Dedency> <GroupId> org.SpringFramework.Session </rolgound> <Ertifactive> printemps-sasion-data-redis </retifactid> </Dependency>
Configuration de la stratégie de session de printemps Application.yml
# OMIT REDIS CONNITION CONFIGURATION CONNEXIQUE ICI SPRING: SESSION: Type de magasin: Redis
Exemple de code de configuration de la sécurité de Spring
@EnablewebsecurityPublic class WebSeCurityConfig étend WebSecurityConfigurerAdapter {@Override Protected void configure (httpSecurity http) lève une exception {http .AuthorizeEquests () .antMatchers ("/ user / **"). Authenticated (). .antMatchers ("/ Manager / **"). Hasanyrole (Roleeenum.Manager.GetMessage ()) .anyRequest (). PermitAll () .And (). FormLogin (). LoginPage ("/ Login"). PermitAll () .and (). Logout (). Permitall () .and (). Csrf (). Disable (); }}Attribution de sortie forcée à l'interface utilisateur
import com.spring4all.bean.ResponseBean; import com.spring4all.service.userservice; import lombok.allargsstructor; import org.springframework.session.findbyindexNameSesSePository; import org.springframework.sses.ssempe; import; org.springframework.session.data.redis.redisoperationsSessionRepository; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.restController; import java.util.arraylist; importer java.util.list; import java.util.map; @ restController @ allargsconstructorpublic class usermanagiapi {privé final final finalSnesessrepository <?? étend la session> SessionRepository; Redisopérations finales privées SessionRepository RedisopérationsSessionRepository; UserService final privé UserService; / ** * Gérer la déconnexion de l'utilisateur spécifié * @Param UserId User ID * @return Informations de session utilisateur * / @preAuthorize ("Hasrole ('Manager')") @GetMapping ("/ Manager / Logout / {Userid}") Public AnsupBean Data (@Pathvariable () Long UserId) {// LegicryNamedinexname de la clé pour implémenter String indexName = userService.getPrincipalNameIndexName (userId); // Interroge les informations de session de l'utilisateur, la touche de valeur de retour est SessionId Map <String ,? étend la session> usonsesssions = sessionRepository.FindByIndexnameAndIndexValue (findByIndexNamesesSesSeSepository.principal_name_index_name, indexName); // Supprimez la liste des informations de session de l'utilisateur <string> sessionIDS = new ArrayList <> (usersesssions.KeySet ()); for (String Session: SessionID) {redisoperationSessionRepository.DeleteById (session); } return ResponseBean.Success (usersessions); }} Description IndexName est la valeur de retour de Principal.getName ().
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.