Spring Boot + Security: нет заголовка Access-Control-Allow-Origin при настройке разрешенных источников - PullRequest
0 голосов
/ 20 января 2019

Я использую Spring Boot v2.1.1.RELEASE вместе с Spring Security и пытаюсь войти в приложение через REST.

У меня есть файл конфигурации, который реализует WebMvcConfigurer, поэтому я могу переопределитьМетод addCorsMappings:

@Override
public void addCorsMappings(final CorsRegistry registry) {
    registry.addMapping("/**");
}

Это отлично работает;Я могу отправить свои данные для входа в систему http://localhost:8080/login и получить обратно нормальный ответ с файлом cookie сеанса и всем:

Access-Control-Allow-Origin: *
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 0
Date: Sun, 20 Jan 2019 13:14:46 GMT
Expires: 0
Pragma: no-cache
Set-Cookie: JSESSIONID=66B74AE4F547BA77604AE199E0A48D7E; Path=/; HttpOnly
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Помните заголовок Access-Control-Allow-Origin.Однако, если я укажу разрешенные источники следующим образом, в ответ не будет включен ранее упомянутый заголовок:

@Override
public void addCorsMappings(final CorsRegistry registry) {
    registry.addMapping("/**").allowedOrigins("localhost");
}

Результатом будет ответ:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 20
Date: Sun, 20 Jan 2019 13:15:15 GMT
Expires: 0
Pragma: no-cache
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Это не имеет значениякакое происхождение я позволяю;«http://localhost",» http://example.com" и «example.com» приводят к одному и тому же результату.

Во время отладки я заметил, что процесс аутентификации останавливается на CorsFilter, когда я включаюallowedOrigins бит в коде.

Это все о процессе входа в систему!Я не могу использовать аннотацию @CrossOrigin (насколько мне известно), потому что у меня нет способа ее вставить.

Я проверяю вход в REST с помощью этого сценария: https://pastebin.com/YezC3wWr

Это баг весной или по замыслу?Я что-то здесь упускаю?

EDIT : Заголовок «Access-Control-Allow-Origin» в ответе отправляется только в том случае, если запрос отправлен из разрешенного источника, и это былоНе тот случай.Я размещал тестовый файл HTML на http://localhost:8000, поэтому мне пришлось добавить этот точный URL к разрешенным источникам на сервере.Не localhost, не localhost:8000, но http://localhost:8000.Затем аутентификация проходит успешно, и заголовок также включается в ответ.

Ответы [ 2 ]

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

Если вы запускаете HTML-страницу в том же домене, что и запрос на вход в систему, в запросе не будет заголовка Origin, следовательно, Access-Control-Allow-Origin.Так ли это с вашим кодом?Вы запускаете файл HTML под http://localhost:8080/?

Если нет, пожалуйста, опубликуйте ошибку в консоли браузера.Также было бы хорошо, если бы вы могли публиковать заголовки как запроса, так и ответа

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

Попробуйте использовать "http://localhost:8080". Вы тестируете его через веб-браузер или POST напрямую, например, с помощью Postman?

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