«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как решить проблемы CORS в JAX-RS с помощью Джерси?

Как решить проблемы CORS в JAX-RS с помощью Джерси?

Опубликовано 21 декабря 2024 г.
Просматривать:900

How to Solve CORS Issues in JAX-RS with Jersey?

Обработка CORS с помощью JAX-RS с использованием Jersey

Проблема: Вы столкнулись с проблемой CORS при обработке запросов с JAX-RS и Джерси. В частности, сервер не устанавливает необходимые заголовки CORS, что приводит к ошибке «В запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin».

Решение: Чтобы обрабатывать CORS в JAX-RS с Джерси, вам необходимо реализовать ContainerResponseFilter. Разница в реализации зависит от того, используете ли вы Jersey 1.x или 2.x.

Jersey 2.x:

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        MultivaluedMap headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type");
        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

Джерси 1.x:

import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerResponse response) {
        response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHttpHeaders().add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type");
        response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHttpHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");

        return response;
    }
}

Дополнительные примечания:

  • Убедитесь, что фильтр CORS зарегистрирован в объекте ResourceConfig.
  • Для лучшей обработки рассмотрите возможность использования более надежная реализация, которая различает простые и предполетные запросы CORS.
  • См. реализацию CORSFilter в разделе RESTeasy для более подробного примера.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3