Сценарии приложения
Недавно в сообществе всегда есть люди, которые разместили статьи с небольшими рекламными объявлениями, которые серьезно влияют на атмосферу сообщества. Я так зол! Для этого типа пользователя его следует навсегда заблокировать!
Структура безопасности сообщества использует весеннюю безопасность и пружину, а статус входа в систему действителен в течение 30 дней. Информация о сессии существует в Redis. Как изящно справиться с этими нечестными пользователями?
Во -первых, просто разделите разрешения пользователя:
Затем заблокируйте указанного пользователя (ROLE_USER -> role_black) и заставьте пользователя выйти (удалить информацию о сеансе пользователя в Redis).
Связанные с проектом зависимости и конфигурация
Зависимости Maven
<!-Security-> <Depective> <groupId> org.springframework.boot </GroupId> <straCactId> Spring-boot-Starter-Security </artifactid> </dependency> <!-Redis-> <Dependency> <groupD> </depervice> <!-Spring Session Redis-> <Degestending> <groupid> org.springframework.session </GroupId> <ratifactId> Spring-Session-Data-REDIS </artifactId> </Зависимость>
Приложение на конфигурации политики весеннего сеанса. Myml
# COMIT Redis Connection Configuration здесь Spring: Session: Type Store: Redis
Пример кода конфигурации безопасности пружины
@EnableWebSecurityPublic Class WebSecurityConfig Extends WebseCerationConfigurerAdapter {@Override Protected void configure (httpsecurity http) Throws {http .authorizeRequests () .antmatchers («/**»). .AntMatchers ("/Manager/**"). Hasanyrole (roleenum.manager.getMessage ()). anyRequest (). armitall (). и (). formlogin (). LoginPage ("/login"). armitall (). и (). logout (). wermilall (). и (). csrf (). }}Принудительный выход назначения пользовательскому интерфейсу
Импорт com.spring4all.bean.responsebean; import com.spring4all.service.userservice; import lombok.allargscstructor; импорт org.springframework.session.session. org.springframework.session.data.redis.redisoperationsSessionRepository; импорт org.springframework.web.bindtation.getmaping; импорт org.springframework.web.bindatation.pathvariable; импорт org.spramework.web.bindtation.Requiable; импорт org.spramework.web.bindtation.Requiable; org.springframework.web.bind.annotation.restcontroller; import java.util.arraylist; import java.util.list; import java.util.map;@restcontroller@allargsconstruprontpublic class usermanageapi {private findbyindexnamesestorposeriation <? Extends Session> SessionRepository; Частный финальный RedisoperationsSessionRepository RedisoperationsSessionRepository; Private Final Userservice Userservice; /*** Управление входом в систему указанного пользователя* @param userid идентификатор пользователя* @return пользовательский сеанс*/@preauthorize ("hasrole ('Manager')") @getmapping ("/Manager/logout/{userId}") для реализации string indexname = userservice.getPrincipalNameIndexname (userId); // Запросить информацию о сеансе пользователя, клавиша возврата значения - это SessionId Map <String ,? Extends Session> usersessions = sessionRepository.findbyindexnamandexvalue (findbyindexnamessessionRepository.principal_name_index_name, indexname); // Удалить список информации о сеансе пользователя <string> sessionIds = new ArrayList <> (usersessions.keyset ()); для (строка сеанса: sessionids) {redisoperationssessionRepository.deleteByid (session); } return responsebean.success (usersessions); }} Описание IndexName - это возвращаемое значение principal.getName ().
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.