Escenarios de aplicación
Recientemente, siempre hay personas en la comunidad que han publicado artículos con pequeños anuncios, lo que afecta seriamente la atmósfera de la comunidad. ¡Estoy tan enojado! Para este tipo de usuario, ¡debe bloquearse de forma permanente!
El marco de seguridad de la comunidad utiliza la seguridad de primavera y la sesión de primavera, y el estado de inicio de sesión es válido por 30 días. La información de la sesión existe en Redis. ¿Cómo lidiar con estos usuarios deshonestos con gracia?
Primero, simplemente divida los permisos del usuario:
Luego, bloquee al usuario especificado (ROLE_USER -> ROLE_BLACK) y obliga al usuario a salir (eliminar la información de la sesión del usuario en Redis).
Dependencias y configuración relacionadas con el proyecto
Dependencias maven
< </dependence> <!-Spring Session Redis-> <Spendency> <MoupRupid> org.springframework.session </groupid> <artifactid> spring-session-data-redis </artifactid> </pendency>
Aplicación de configuración de política de sesión de primavera.ML
# omitir la configuración relacionada con la conexión Redis aquí Spring: Sesión: Tipo de tienda: Redis
Muestra de código de configuración de seguridad de Spring
@EnableWebSecurityPublic Class WebSecurityConfig extiende WebSecurityConfigurerAdapter {@Override Proteged void Configure (httpsecurity http) lanza la excepción {http .authorizequests () .antMatchers ("/usuarios/**"). .antMatchers ("/gerente/**"). Hasanyrole (roleenum.manager.getMessage ()) .yyRequest (). Permitall () .Ant (). FormLogin (). LoginPage ("/Login"). PermITALL () .and (). Logout (). PermeSeStall () .and (). Csrf (). }}Salida forzada Asignar a la interfaz de usuario
import com.spring4all.Bean.ResponseBean; import com.spring4all.service.userservice; import lombok.alLargSconstructor; import org.springframework.session.findbyIndexNamesessessionRepository; import og.springframework.session; import; org. org.springframework.web.bind.annotation.restController; import java.util.arrayList; import java.util.list; import java.util.map;@rintroller@allargsconstructorPublic Usermanageapi {finales finales finales de inyección de nombres d. extiende la sesión> SessionRepository; RedisOperations Final PrivateSessionSessionRepository RedisOperationsSessionRepository; UserService de usuarios de usuarios finales privados; /*** Administre la sesión de inicio de sesión del usuario especificado* @param ID de usuario de usuarioid* @return Información de la sesión de usuario*/@peauthorize ("HasRole ('Manager')") @getMapping ("/Manager/logrout/{userId}") Datos públicos de respuesta pública (@PathVariable () Long UserId) {// consulta NUEVO DEL SOBRE PRINCIPAL (la clave de la clave de la rediseño de la rediseude de la rediseuración de la clave de la rediseuración y el combate de los usuarios. para implementar una cadena indexName = Userservice.getPrIpRipalNameIndexName (userId); // Consulta la información de la sesión del usuario, la clave de valor de retorno es el mapa de SessionID <cadena ,? extiende la sesión> Usersessions = SessionRepository.FindbyIndexNneAndIndexValue (findByIndexNamesessessessionRepository.principal_name_index_name, indexName); // Eliminar la lista de información de la sesión del usuario <String> sessionIds = new ArrayList <> (Usersessions.KeySet ()); for (session de cadena: sessionIds) {redisOperationsSessionRepository.DeleteById (sesión); } return ResponseBean.Success (UserSesions); }} Descripción IndexName es el valor de retorno de principal.getName ().
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.