Cenários de aplicação
Recentemente, sempre há pessoas na comunidade que publicaram artigos com pequenos anúncios, o que afeta seriamente a atmosfera da comunidade. Estou com tanta raiva! Para esse tipo de usuário, ele deve ser bloqueado permanentemente!
A estrutura de segurança da comunidade usa a segurança da primavera e a sessão de primavera, e o status de login é válido por 30 dias. As informações da sessão existem em Redis. Como lidar com esses usuários desonestos graciosamente?
Primeiro, basta dividir as permissões do usuário:
Em seguida, bloqueie o usuário especificado (Role_User -> Role_black) e force o usuário a sair (exclua as informações da sessão do usuário no Redis).
Dependências e configuração relacionadas ao projeto
Dependências do MAVEN
<!-Segurança-> <Depencency> <PuerpId> org.springframework.boot </groupiD> <TRATIFACTID> Spring-boot-Starter-Security </ArtifactId> </dependency> <!-Redis-> <Depence> <purfact> org.springBROTWROW.BOOT <//Groupid> </dependency> <!-Spring Session Redis-> <Depence> <GroupId> org.springframework.session </frugiD> </ArtifactId> Spring-session-Data-Redis </sutifactId> </Dependence>
Spring Session Policy Configuration Application.yml
# omite a configuração relacionada à conexão Redis aqui Spring: Session: Store-Type: Redis
Amostra de código de configuração de segurança da primavera
@EnableWebSecurityPublic Classe webcurityConfig estende o webcurityConfigureRAdApter {@Override Protected void Configure (httpsecurity http) lança exceção {http .authorizerequests () .ntmatchers ("/user/**"). .antmatchers ("/gerente/**"). hasanyrole (roleenum.manager.getMessage ()) .anyRequest (). Permitall () .And (). FormLogin (). LoginPage ("/login"). Permitall () .and (). }}Saída forçada atribuir para interface do usuário
importação com.spring4all.bean.ResponseBean; importação com.spring4all.service.userService; importar lombok.allargsconstructor; importação org.springframework.session.findbyIndexamesessionRepository; importar.springFramework.Session.Session; org.springframework.session.data.redis.RedisOperationsSessionRepository; importar org.springframework.web.bind.annotation.getMapping; importanation.springframework.web.bind.annotation.PathenBiable; import.springframework.web.bind.annotation.pathiable; org.springframework.web.bind.annotation.restcontroller; importar java.util.arraylist; importar java.util.list; importar java.util.map;@reestcontroller@alargsconstructorpublic ClassemanageApi {private Findby estende a sessão> sessionRepository; Principal Principal RedisoteationsSessionRepository RedisOperationsSessionRepository; Serviço de Usuários de Usuários do UserService privado; /*** Gerencie o logout do usuário especificado* @param UserID ID do usuário* @return Informações da sessão do usuário*/@preathorize ("hasRole ('gerente')") @getMapp ("/gerente/logout/{userId}") public Response Data (@PathVariable () LOMEDIDO (// //} ") implementar string indexName = userservice.getPrincipalNameIndexName (UserID); // Consulta as informações da sessão do usuário, a chave do valor de retorno é o mapa sessionID <string ,? Extende sessão> usuáriossões = sessionRepository.findbyIndexnameAndIndexValue (FindByIndexNamesionRepository.principal_name_index_name, indexname); // Remova a lista de informações da sessão do usuário <String> sessionids = new ArrayList <> (usuáriossões.keyset ()); para (String Session: SessionIds) {RedisOperationsSessionRepository.DeleteById (Sessão); } retornar ResponseBean.Success (Usersessions); }} Descrição IndexName é o valor de retorno do principal.getName ().
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.