gpt4 book ai didi

对于来自 RESTEasy 的所有响应,JBoss7 将 Cache-Control、Pragma 设置为 no-cache

转载 作者:行者123 更新时间:2023-12-04 01:14:12 33 4
gpt4 key购买 nike

我正在尝试使用 RESTEasy 框架将 Cache-Control header 添加到 JBoss 7 中生成的响应中。但是,由于 JBoss 默认添加了 no-cache header ,所有响应最终都会获得多个 Cache-Control header 。

我找不到任何设置来删除它,并且添加拦截器也不起作用,因为稍后会添加无缓存 header 。

有人可以告诉我如何禁用 JBoss 7 中的默认编译指示和缓存控制 header 吗?

注意:我将 resteasy 与无状态 EJB 一起使用。

@Path("/api")
@Local
public interface UCSRestServiceInterface
{
@GET
@Path("/token")
@Produces("application/json")
@Cache(maxAge = 3600, noTransform = true)
public Response getToken();
}

获取响应 header 为,
{
"pragma": "No-cache",
"date": "Thu, 11 Feb 2016 20:16:30 GMT",
"content-encoding": "gzip",
"server": "Apache-Coyote/1.1",
"x-frame-options": "SAMEORIGIN",
"vary": "Accept-Encoding,User-Agent",
"content-type": "application/json",
"cache-control": "no-cache, no-transform, max-age=3600",
"transfer-encoding": "chunked",
"connection": "Keep-Alive",
"keep-alive": "timeout=15, max=100",
"expires": "Wed, 31 Dec 1969 19:00:00 EST"
}

最佳答案

Web 应用程序中的过滤器资源基本上可以让您拦截请求和响应,并且主要设计用于通过更改请求/响应 header 来工作的一些用例。更多详情 here

由于您使用的是 RESTEasy,因此您可以使用 ContainerResponseFilter; JAX-RS 提供的过滤器接口(interface)。您可以通过实现此接口(interface)来编写自定义过滤器。过滤器类(添加一个到您的网络应用程序源代码)将如下所示:-

@Provider
public class YourCustomFilter implements ContainerResponseFilter{

// you can check the actual string value by using method "getStringHeaders" on 'resp' below
private static final String CACHE_CONTROL = "cache-control";

@Override
public void filter(ContainerRequestContext req,
ContainerResponseContext resp) throws IOException {

if(resp.getHeaders().containsKey(CACHE_CONTROL)){
resp.getHeaders().remove(CACHE_CONTROL);
resp.getHeaders().add(CACHE_CONTROL, "no-transform, max-age=3600");
}
resp.getHeaders().add(CACHE_CONTROL, "no-transform, max-age=3600");

}

}

在这里,您基本上检查是否存在 Cache-Control header ,如果存在,请删除现有的并添加您自己的。
请不要忘记 @Provider jax rs 运行时需要的注释来发现您的自定义过滤器。

请注意,使用此过滤器,所有对您的 web 应用程序的请求都将被拦截。如果你想拦截某个资源或者资源方法可以探索使用 @NameBinding

让我知道这是否有效。

关于对于来自 RESTEasy 的所有响应,JBoss7 将 Cache-Control、Pragma 设置为 no-cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35097400/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com