Как удалить заголовок ответа с помощью RestFilter - PullRequest
0 голосов
/ 10 марта 2020

Можно ли удалить заголовки ответа с помощью RestFilter? Глядя на эту кулинарную книгу , вы скажете, что это возможно. Однако фильтр вызывается только при поступлении запроса, до вызова класса ресурсов. Я ожидал получить хук, где я мог бы изменить заголовки ответа перед отправкой его обратно клиенту.

В качестве примера я посмотрел CORSFilter, но он только устанавливает заголовки, а не удаляет их.

Чтобы быть более точным c, я хочу удалить заголовок WWW-Authenticate, который устанавливается провайдером аутентификации после истечения сеанса. Этот заголовок вызывает нежелательное всплывающее окно в браузере (chrome).

1 Ответ

1 голос
/ 11 марта 2020

вам нужен javax.ws.rs.container.ContainerRequestFilter. В jax-rs такие фильтры могут быть зарегистрированы в javax.ws.rs.core.Application. В ICM используется приложение com.intershop.component.rest.internal.application.DefaultRestApplication, которое можно адаптировать с помощью com.intershop.component.rest.internal.application.ApplicationClassesProvider, которое можно зарегистрировать с помощью Set-Binding.

Таким образом, вы можете создать Guice-модуль и ваш фильтр:

public class MyRestModule extends AbstractModule
{
    @Override
    protected void configure()
    {
        Multibinder<ApplicationClassesProvider> binder = Multibinder.newSetBinder(binder(),
                        ApplicationClassesProvider.class);
                    binder.addBinding().toInstance(c->c.accept(MyResponseFilter.class));
    }
}

public class MyResponseFilter extends ContainerRequestFilter
{
    @Override
    public void filter(ContainerRequestContext request, ContainerResponseContext response)
    {
        response.getHeaders().remove("WWW-Authenticate");
    }
}

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

...