Чтобы изменить SecurityContext только для текущего запроса

Я использую Spring Boot + повторение данных сеанса spring

Мой сценарий: пользователь A вошел в систему, и JSESSIONID создан для пользователя A, теперь он выдает токен, который будет отправлен на какой-либо компьютер и действителен в течение нескольких минут для работы от его имени.
Проблема в том, что если какой-то клиент случайно передает и Cookie, и токен, тогда я хочу отдать предпочтение TOKEN, а не JSESSIONID, возможно ли это в Spring Session.
Я не могу аннулировать сеанс cookie, так как он приведет к выходу из системы UserA, что нежелательно.

Итак, я хочу сообщить Spring, использовать ли существующий сеанс или создать новый. на основе некоторого условия и хотите отдать предпочтение TOKEN. И создать совершенно новый сеанс без аннулирования сеанса cookie.


person Art    schedule 03.06.2017    source источник


Ответы (1)


Чтение официальной документации.

Из этого

@EnableRedisHttpSession 
public class Config {

        @Bean
        public LettuceConnectionFactory connectionFactory() {
                return new LettuceConnectionFactory(); 
        }
}

Это сделано по умолчанию.

The @EnableRedisHttpSession annotation creates a Spring Bean with the name of springSessionRepositoryFilter that implements Filter. The filter is what is in charge of replacing the HttpSession implementation to be backed by Spring Session. In this instance Spring Session is backed by Redis.

We create a RedisConnectionFactory that connects Spring Session to the Redis Server. We configure the connection to connect to localhost on the default port (6379) For more information on configuring Spring Data Redis, refer to the reference documentation.

The DelegatingFilterProxy will look up a Bean by the name of springSessionRepositoryFilter and cast it to a Filter. For every request that DelegatingFilterProxy is invoked, the springSessionRepositoryFilter will be invoked.

Итак, что вам нужно сделать, это избегать конфигурации Spring или искать, хотите ли вы как-то изменить это поведение по умолчанию, чтобы создать свою собственную реализацию DelegatingFilterProxy и настроить ее в своей цепочке фильтров ServletContext.

person Dani    schedule 04.06.2017
comment
Я могу добиться этого, предоставив свою собственную реализацию HttpSessionSecurityContextRepository, а затем установив http.securityContext().securityContextRepository(new CustomHttpSessionSecurityContextRepository()); Итак, я реализую свой собственный SaveContextOnUpdateOrErrorResponseWrapper, в котором я не сохраняю контекст и, следовательно, он не изменяется в сеансе. - person Art; 04.06.2017