responsejs с прокси не получает анонимный сеанс из бэкэнда весенней загрузки - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь использовать приложение create-Reaction-app для запуска внешнего интерфейса моего проекта весенней загрузки.

Я использую Redis для хранения сессий.

Почему-то мне действительно нужно включить генерацию сеансов для анонимных пользователей.

Следующий код является моей конфигурацией безопасности для весенней загрузки:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //@formatter:off
        http
            .formLogin()
                .loginPage("/login")
                    .permitAll()
                .loginProcessingUrl("/form-login")
                .and()
            .cors()
                .and()
            .csrf()
                .disable()
            .authorizeRequests()
                .antMatchers("/restricted/**")
                    .authenticated()
                .antMatchers("/**")
                    .permitAll()
                .and()
           .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.ALWAYS);
        //@formatter:on
    }
}

Я проверил это, имея очень простой файл index.html внутри папки «static» в моем проекте весенней загрузки. Затем я перехожу к "http://localhost:8080" и вижу сессионный файл cookie.

Затем я удалил файл «index.html» и запустил приложение реагирования с настройкой прокси. По умолчанию новый URL-адрес "http://localhost:3000".. Я вижу страницу запуска по умолчанию responsejs, но у меня больше нет файлов cookie сеанса.

Моя настройка прокси в "package.json" для моего приложения create-реагирует следующим образом:

"proxy": "http://localhost:8080"

Я также проверил, что я все еще могу получить куки-файл сессии, только если я напрямую перейду к "http://localhost:8080" вместо порта 3000.

Любая помощь приветствуется. Большое спасибо заранее.

1 Ответ

0 голосов
/ 07 января 2019

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

Проблема с прокси-сервером create-реагировать-app заключается в том, что это прямой прокси. Таким образом, сессионный cookie не очень хорошо работает с прямым прокси. К сожалению, не существует простого решения этой проблемы, но есть обходной путь.

Как я уже упоминал выше, я точно могу получить cookie-файл сеанса, напрямую обращаясь к URL-адресу бэкенда. Поэтому, если я хочу получить cookie-файл сеанса с помощью прокси-сервера, я должен поместить некоторый код во внешний интерфейс, чтобы сначала получить доступ к бэкэнду, а затем помещать cookie-файл сеанса в заголовок при каждом запуске приложения. Затем продолжайте следить за внешним интерфейсом и возобновляйте сеанс всякий раз, когда он истекает.

Для наилучшей практики в бэкэнде должен быть фиктивный сервис, в котором нет сеанса, нет логина и токенов, но есть фиктивные данные. Поскольку внешнему интерфейсу на самом деле не важно, как работает сеанс, токен доступа или вход в систему, это бэкэнд-задания. Интерфейс просто должен получить данные и затем отобразить данные.

Но на самом деле наличие фиктивного сервера может занять время, и это не стоит делать в каждом конкретном случае.

Так что, если вы не хотите писать фиктивный сервер, вы либо используете прокси-сервер, но у вас есть небольшой хак в вашем интерфейсе, чтобы фактически получить сеанс. Или вы создаете все приложение внешнего интерфейса и помещаете его в папку «static» в приложении весенней загрузки.

Для меня я бы предпочел разделить интерфейс и бэкэнд, а не соединять их все вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...