WildFly 10 上的 JAX-RS REST 服务 + EJB,总是在响应中添加无缓存 HTTP 标头

法比亚诺·塔劳

我编写了一个提供休息服务的无状态 EJB。我正在使用 Wildfly 10 应用程序服务器并使用 Netbeans IDE 进行开发。

我试图通过在服务方法的 http-response 中添加 max-age 标头来缓存几个方法的返回值几个小时。请考虑这是我的 bean 的简化版本:

    @Stateless
    @DeclareRoles({"role1","role2"})
    @RolesAllowed({"role1","role2"})
    @Path("api-dummy")
    public class DummyApiREST {

        @EJB
        private StuffFacade stuffFacade;

        @GET
        @Path("get-stuff")
        @Produces({MediaType.APPLICATION_JSON})
        public Response findStuff() {
            Stuff stuff = stuffFacade.getStuff();
            Response.ResponseBuilder builder = Response.status(Response.Status.OK).entity(stuff);
            Utils.setCacheHeader(maxAgeSeconds, builder);
            return builder.build();
        }
   }

和 setCacheHeader 方法:

private static Response.ResponseBuilder setCacheHeader(int maxAgeSeconds, Response.ResponseBuilder builder) {
        CacheControl cc = new CacheControl();
        cc.setNoCache(false);
        cc.setNoStore(false);
        cc.setMaxAge(maxAgeSeconds);
        cc.setPrivate(true);
        builder.cacheControl(cc);
        return builder;
 }

但是“get-stuff”返回的响应总是包含Cache-Control 标头的副本;重复的标头包含 no-cache 指令(这也是一个 Pragma 标头):

HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, must-revalidate
Cache-Control: no-transform, max-age=60, private
X-Powered-By: Undertow/1
Server: WildFly/10
Pragma: no-cache
Date: Thu, 13 Apr 2017 15:11:17 GMT
Connection: keep-alive
Content-Type: application/json

我想问题是由 EJB 中 JAX-RS 服务的默认行为(或过滤器)引起的。我的问题是:

  • 有没有更好的方法来设置 max-age 并在 JAX-RS + EJB 中启用缓存?
  • 有没有办法禁用这种无缓存默认行为?(或者换句话说,这通常在哪里配置?)
  • ......我的解决方案有什么问题?:-)

注意:也许它不相关,我已经配置了 jdbc 安全域,并且用户身份验证和主体运行良好。

问候

法比亚诺·塔劳

我找到了解决办法。默认情况下,Wildfly(我认为JBoss的太)增加了无缓存指令到所有私有资源(资源需要身份验证)。

您必须通过server-container标记中添加属性disable-caching -*来更改standalone.xml文件中的配置

<servlet-container name="default" disable-caching-for-secured-pages="false">
                    <jsp-config/>
                    <websockets/>
</servlet-container>

通过这种方式,不会再将 Pragmanocache指令添加到响应和我在问题中发布的代码中,它只是按预期工作。

编辑:提醒,当在同一 URL 上请求私有资源时,必须将不同的内容返回给不同的用户,您必须:

  • 私有标头添加到该响应中,以便您的反向代理不缓存该内容或替代..
  • .. 将nocache标头留在那里用于响应

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Jax-rs HTTP标头范围

来自分类Dev

Jax-RS HTTP标头范围

来自分类Dev

用于 Spring Boot + Wildfly 10 中 jpa 查询的 jax-rs 服务中的 NPE

来自分类Dev

在JAX-RS中使用Location标头创建响应

来自分类Dev

使用JAX-RS在REST服务中的可重用性

来自分类Dev

本地开发中的JAX-RS“ Faked”标头

来自分类Dev

如何从Codeigniter Rest服务器向HTTP响应添加位置标头

来自分类Dev

在 SoapServer 响应上添加 HTTP 标头

来自分类Dev

将REST服务的CSRF令牌作为Http响应标头包含在其中是否安全?

来自分类Dev

将用于REST服务的CSRF令牌作为Http响应标头包含是否安全?

来自分类Dev

在UIWebView上获取HTTP响应标头

来自分类Dev

在实现中设置JAX-RS响应标头,而无需在接口中暴露HttpServletResponse

来自分类Dev

在实现中设置JAX-RS响应标头,而无需在接口中暴露HttpServletResponse

来自分类Dev

在服务器上为PHP REST Web服务实现Jersey(JAX-RS)客户端库

来自分类Dev

在服务器上为PHP REST Web服务实现Jersey(JAX-RS)客户端库

来自分类Dev

在Jersey JAX_RS中错误,在JDK> 8中带有OPTIONS标头?

来自分类Dev

使用JPA jax-rs REST服务从2个不同的表中获取数据

来自分类Dev

从Junit中的Jax-Rs Response类获取标头值,状态代码等

来自分类Dev

如何在Tomcat上的JAX-RS(Jersey)中返回HTTP 404 JSON / XML响应?

来自分类Dev

rest jax-rs:服务器错误

来自分类Dev

与Web服务和网站(REST,JAX-RS,Servlet等)混淆

来自分类Dev

rest jax-rs:服务器错误

来自分类Dev

JAX RS中REST端点的顺序

来自分类Dev

JAX RS中REST端点的顺序

来自分类Dev

使用jersey的Java(JAX-RS)中的简单RESTful Web服务,抛出HTTP状态404

来自分类Dev

如何在JAX-RS服务中读取授权标头

来自分类Dev

在jax-rs中设置承载头

来自分类Dev

Spring Rest服务中的可选请求标头

来自分类Dev

服务器如何设置HTTP响应标头?

Related 相关文章

  1. 1

    Jax-rs HTTP标头范围

  2. 2

    Jax-RS HTTP标头范围

  3. 3

    用于 Spring Boot + Wildfly 10 中 jpa 查询的 jax-rs 服务中的 NPE

  4. 4

    在JAX-RS中使用Location标头创建响应

  5. 5

    使用JAX-RS在REST服务中的可重用性

  6. 6

    本地开发中的JAX-RS“ Faked”标头

  7. 7

    如何从Codeigniter Rest服务器向HTTP响应添加位置标头

  8. 8

    在 SoapServer 响应上添加 HTTP 标头

  9. 9

    将REST服务的CSRF令牌作为Http响应标头包含在其中是否安全?

  10. 10

    将用于REST服务的CSRF令牌作为Http响应标头包含是否安全?

  11. 11

    在UIWebView上获取HTTP响应标头

  12. 12

    在实现中设置JAX-RS响应标头,而无需在接口中暴露HttpServletResponse

  13. 13

    在实现中设置JAX-RS响应标头,而无需在接口中暴露HttpServletResponse

  14. 14

    在服务器上为PHP REST Web服务实现Jersey(JAX-RS)客户端库

  15. 15

    在服务器上为PHP REST Web服务实现Jersey(JAX-RS)客户端库

  16. 16

    在Jersey JAX_RS中错误,在JDK> 8中带有OPTIONS标头?

  17. 17

    使用JPA jax-rs REST服务从2个不同的表中获取数据

  18. 18

    从Junit中的Jax-Rs Response类获取标头值,状态代码等

  19. 19

    如何在Tomcat上的JAX-RS(Jersey)中返回HTTP 404 JSON / XML响应?

  20. 20

    rest jax-rs:服务器错误

  21. 21

    与Web服务和网站(REST,JAX-RS,Servlet等)混淆

  22. 22

    rest jax-rs:服务器错误

  23. 23

    JAX RS中REST端点的顺序

  24. 24

    JAX RS中REST端点的顺序

  25. 25

    使用jersey的Java(JAX-RS)中的简单RESTful Web服务,抛出HTTP状态404

  26. 26

    如何在JAX-RS服务中读取授权标头

  27. 27

    在jax-rs中设置承载头

  28. 28

    Spring Rest服务中的可选请求标头

  29. 29

    服务器如何设置HTTP响应标头?

热门标签

归档