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

2023-12-30

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

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

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

注意:我将 Resteasy 与无状态 EJB 结合使用。

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

获取响应标头为,

{
  "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 应用程序中的过滤器资源基本上可以让您拦截请求和响应,主要针对某些通过更改请求/响应标头来工作的用例而设计。更多细节here https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Filter.html

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

@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 标头是否存在,如果存在,则删除现有标头并添加您自己的标头之一。 请不要忘记@Providerjax rs 运行时发现您的自定义过滤器所需的注释。

请注意,使用此过滤器,所有对您的 web 应用程序的请求都将被拦截。如果您想要拦截某个资源或某个资源方法,您可以探索使用@NameBinding https://docs.jboss.org/resteasy/docs/3.0-beta-2/javadocs/javax/ws/rs/NameBinding.html

让我知道这是否有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JBoss7 将 Cache-Control、Pragma 设置为 no-cache,以应对来自 RESTEasy 的所有响应 的相关文章

随机推荐