Девятый анализ исходного кода Spring Security: управление Spring Security Session

задняя часть Spring Безопасность редкоземельный

Сеанс: На компьютерах, особенно в сетевых приложениях, это называется «управление сеансом». Объект Session хранит свойства и информацию о конфигурации, необходимые для определенного пользовательского сеанса. Таким образом, переменные, хранящиеся в объекте Session, не будут потеряны при переходе пользователя между веб-страницами приложения, а будут сохраняться на протяжении всего сеанса пользователя. Когда пользователь запрашивает веб-страницу из приложения, веб-сервер автоматически создает объект сеанса, если у пользователя еще нет сеанса. Когда сеанс истекает или прекращается, сервер завершает сеанс. Одним из наиболее распространенных применений объекта Session является хранение пользовательских настроек.

Управление сеансом

В этой статье в основном описываетсяSpring SecurityВнизSessionСледующие три вида управления,

  1. Sessionсверхурочное время
  2. Sessionстратегия параллелизма
  3. Кластерная средаSessionиметь дело с

Время ожидания сеанса

  1. application.ymlНастроить время ожидания
server:
  port: 80
  session:
    timeout: 60
  1. настроитьMerryyouSecurityConfig
http.
......
	       .sessionManagement()
            .invalidSessionUrl("/session/invalid")//session失效跳转的链接
.....
  1. Cotrollerсередина/session/invalid
@GetMapping("/session/invalid")
    @ResponseStatus(code = HttpStatus.UNAUTHORIZED)
    public Result<String> sessionInvalid() {
        return ResultUtil.error(HttpStatus.UNAUTHORIZED.value(), "session失效");
    }

Эффект следующий:

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2018/1/19/1610da788886d37b~tplv-t2oaga2asx-image.image
https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2018/1/19/1610da788886d37b~tplv-t2oaga2asx-image.image

Стратегия параллелизма сеансов

  1. настроитьMerryyouSecurityConfig
http.
......
	       .maximumSessions(1)//最大session并发数量1
           .maxSessionsPreventsLogin(false)//false之后登录踢掉之前登录,true则不允许之后登录
           .expiredSessionStrategy(new MerryyounExpiredSessionStrategy())//登录被踢掉时的自定义操作
.....
  1. MerryyounExpiredSessionStrategy
@Slf4j
public class MerryyounExpiredSessionStrategy implements SessionInformationExpiredStrategy {
    @Override
    public void onExpiredSessionDetected(SessionInformationExpiredEvent eventØ) throws IOException, ServletException {
        eventØ.getResponse().setContentType("application/json;charset=UTF-8");
        eventØ.getResponse().getWriter().write("并发登录!");
    }
}

Эффект следующий:

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2018/1/19/1610da788874eadc~tplv-t2oaga2asx-image.image
https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2018/1/19/1610da788874eadc~tplv-t2oaga2asx-image.image

когдаmaxSessionsPreventsLogin(true)Вы можете обратиться к:Spring-Securityа такжеsecurity-oauth2

Обработка сеанса кластерной среды

  1. Добавить зависимость spring-session-data-redis
<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
			<version>1.3.1.RELEASE</version>
		</dependency>
  1. Настройка стратегии хранения Spring-сессии
spring:
  redis:
    host: localhost
    port: 6379
  session:
    store-type: redis
  1. тестовое задание8080а также8081Порт запускает проект отдельно
java -jar spring-security.jar --server.port=8080
java -jar spring-security.jar --server.port=8081

Эффект следующий:

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2018/1/19/1610da788866b600~tplv-t2oaga2asx-image.image
https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2018/1/19/1610da788866b600~tplv-t2oaga2asx-image.image

Для получения дополнительной информации о Spring Session, пожалуйста, обратитесь к:Программист ДД

загрузка кода

Скачать с моего гитхаба,GitHub.com/Longfeizhen…