Spring Boot: сервер не принимает предварительные запросы - PullRequest
0 голосов
/ 12 апреля 2020

Я довольно новичок в Spring Framework и уже довольно давно сталкиваюсь с проблемой.

Я хочу получить доступ к своему серверу через HTTP-запросы из приложения Angular, но сервер не принимает предварительный запрос от моего Angular приложения.

Ошибка Msg. в Chrome:

Access to XMLHttpRequest at 'https://localhost:8444/' from origin 'https://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Вход с сервера:

HTTP OPTIONS "/"
Complete 401 UNAUTHORIZED

или

HTTP OPTIONS "/"
Completed 403 FORBIDDEN

Вот мой сервер настройки:

AuthorizationConfig:

    @Bean
    fun securityWebFilterChainFn(http: ServerHttpSecurity): SecurityWebFilterChain = http
        .authorizeExchange { exchanges ->
            val issuePath = "/"
            val issueIdPath = "/*"

            exchanges
                .pathMatchers(POST, issuePath).permitAll()
                .pathMatchers(GET, issuePath, issueIdPath).hasRole(admin)
                .pathMatchers(PUT, issuePath).hasRole(admin)
                .pathMatchers(PATCH, issueIdPath).hasRole(admin)
                .pathMatchers(DELETE, issueIdPath).hasRole(admin)

                .pathMatchers(OPTIONS).permitAll() // <--- with this line: Status 403, without 401

                .matchers(EndpointRequest.to("health")).permitAll()
                .matchers(EndpointRequest.toAnyEndpoint()).hasRole(actuator)

                .anyExchange().authenticated()
        }
        .httpBasic {}
        .formLogin { form -> form.disable() }
        .csrf { csrf -> csrf.disable() }
        .build()
  endpoints.web.cors:
    allowed-origins: https://localhost,https://127.0.0.1,https://localhost:4200,https://127.0.0.1:4200
    allowed-methods: GET,POST,PUT,PATCH,DELETE,OPTIONS
    allowed-headers: Origin,Content-Type,Accept,Authorization,Access-Control-Allow-Origin,Access-Control-Allow-Methods,Access-Control-Allow-Headers,Access-Control-Expose-Headers,Allow,Content-Length,Date,If-None-Match,If-Match,Last-Modified,If-Modified-Since,Host,User-Agent,Accept,Accept-Encoding,Connection,Sec-Fetch-Dest,User-Agent
    exposed-headers: Location,ETag,Access-Control-Allow-Origin,Access-Control-Allow-Headers

также пробовал следующее, с тем же результатом:

endpoints.web.cors:
  allowed-origins: '*'
  allowed-methods: '*'
  allowed-headers: '*'
  exposed-headers: 

Решение для Эта проблема должна быть легкой, если разрешить предварительную проверку OPTIONS в моей FilterChain. Я сделал это с .pathMatchers(OPTIONS).permitAll(), но это только изменяет код состояния с 401 на 403.

Есть что-то, что я пропустил? Поскольку я все еще очень плохо знаком с Spring, я еще не знаю всех возможностей и, возможно, я упустил что-то важное. Любая помощь или совет высоко ценится.

Моя настройка:

Spring Boot      2.3.0.M3
Spring Security  5.3.0.RELEASE
Spring Framework 5.2.5.RELEASE
Kotlin           1.4.0
OpenJDK          14+36-1461
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...