Вложенные преобразователи graphql-java выполняются в разных потоках и имеют разные контексты безопасности Spring. - PullRequest
1 голос
/ 09 апреля 2019

Я использую graphql-java, и он выполняет разные вложенные преобразователи в отдельных потоках.

У меня есть собственный фильтр безопасности Spring, который анализирует токен Bearer из заголовка авторизации и добавляет его к текущемувесенний контекст безопасности.

Мне удалось временно решить проблему, прослушав ContextRefreshedEvent и применив стратегию Global, как вы можете видеть здесь:

    @EventListener
    fun setupSecurityContext(event: ContextRefreshedEvent) {
        SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL)
    }

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

SecurityContextHolder.getContext().authentication.principal

Я считаю, что это не очень хорошая практика.Я предполагаю, что данные из одного запроса могут быть предоставлены другому пользователю другим потоком.

...