如何使用RestFilter删除响应标头



是否可以使用RestFilter删除响应标头?看着这本食谱,你会说这应该是可能的。但是,只有当请求传入时,在调用资源类之前,才会调用筛选器。我希望有一个钩子,在将响应头发送回客户端之前,我可以修改它。

我以CORSFilter为例,但它只设置了标头,而没有删除它们。

更具体地说,我想删除由Auth提供程序在会话过期时设置的WWW-Authenticate标头。此标题会导致浏览器(chrome(中出现不希望出现的弹出窗口。

您需要的是一个javax.ws.rs.container.ContainerRequestFilter。在jax-rs中,此类筛选器可以在javax.ws-rs.core.Application中注册。ICM中使用的应用程序是com.intershop.component.rest.internal.Application.DefaultRestApplication,它可以使用com.intershop.ponent.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");
}
}

请注意,此筛选器将应用于所有请求,因此请确保仅删除您真正关心的请求的标头。

最新更新