Сброс бина области видимости сеанса Spring между запросами при доступе через zuul

Приложение Spring имеет сессионный компонент, который содержит определенные данные. Эти данные загружаются из БД в init запрос к контроллеру, который всегда является первым запросом клиента при запуске. Эти данные используются для других запросов тем же пользователем. Теперь все работает само по себе. Однако после попытки интегрировать приложение в систему с помощью zuul (который, насколько я понимаю, в этом контексте просто перенаправляет запрос с одного URL-адреса на другой), он сломался. Всякий раз, когда метод вызывается после initданные сессионного компонента null,

Вот фрагмент из класса обслуживания:

    @Autowired
    TaskCache cache;


    @Override
    public void initUserSession() {
        List<Task> data = loadTasks();
        cache.setTasks(data);
        LinearFilterStack<Task> fs = createFilterStack(data);
        cache.setFilterStack(fs);

        System.out.println(cache.hashCode()); //hashcode stays same
        System.out.println(cache.getFilterStack() == null) //false
    }


    @Override
    public List<Task> getTasks(Sort sort) {
        System.out.println(cache.hashCode()); //hashcode stays same
        System.out.println(cache.getFilterStack() == null) //true
        LinearFilterStack<Task> fs = cache.getFilterStack();
        List<Task> tasks = fs.filter(cache.getTasks()); //Obviously NPE
        sortTasks(tasks, sort);
        return tasks;
    }

@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.TARGET_CLASS)
public class TaskCache { ... }

И опять же, это происходит только через зуул. Т.е. если я использую localhost:30022/rest/... это работает, если я использую localhost:8080/app/tasks/rest/... (который zuul перенаправляет на localhost:30022/rest/...), я получаю NPE потому что компонент кэша теряет свои данные после запроса инициализации.

1 ответ

Решение

Это может быть вызвано поведением Zuul по умолчанию, которое предотвращает передачу заголовков, связанных с cookie.

Ниже приведена конфигурация Zuul по умолчанию, и она не позволяет передавать заголовки ниже на ваши нижестоящие серверы API.

zuul.sensitiveHeaders= Authorization,Cookie,Set-Cookie

Поэтому, пожалуйста, попробуйте определить ниже свойства. Это позволит передавать все заголовки, связанные с файлами cookie, на серверы API.

zuul.sensitiveHeaders= Authorization

Вы можете найти более подробную информацию в разделе "Файлы cookie и чувствительные заголовки" этого документа.

Другие вопросы по тегам