Я использую 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
.Затем аутентификация проходит успешно, и заголовок также включается в ответ.