java - preProcess 和 postProcess 之间的 resteasy 拦截器线程安全吗?

标签 java multithreading resteasy

如果我有一个同时实现前处理和后处理的类,我是否能够在 preProcess 调用和 postProcess 调用之间将内容存储在对象上?

那么这真的合法吗?

@ServerInterceptor
@Provider
public class MyInterceptor implements PreProcessInterceptor, PostProcessInterceptor {

    private String url;

    @Override
    public ServerResponse preProcess(HttpRequest request, ResourceMethod resourceMethod) throws Failure, WebApplicationException {
        url = request.getUri().getRequestUri().toString();
        return null;
    }

    @Override
    public void postProcess(ServerResponse response) {
        System.out.println(url);
    }
}

最佳答案

好的,我已经进行了实验,答案似乎是在 JBoss jboss-as-7.1.1.Final 中运行的 rest easy 2.01GA 我得到了不同的 preProcess 和 postProcess 实例。

那么“这合法吗?”的答案是NO。

因此,作为一种解决方法,我包括了 HttpServletRequest 的上下文并将状态存储为请求属性:

@ServerInterceptor
@Provider
public class MyInterceptor implements PreProcessInterceptor, PostProcessInterceptor {

    private static final String ATTRIBUTE_NAME = MyInterceptor.class.getName();

    @Context
    HttpServletRequest servletRequest;

    @Override
    public ServerResponse preProcess(HttpRequest request, ResourceMethod resourceMethod) throws Failure, WebApplicationException {
        String url = request.getUri().getRequestUri().toString();
        servletRequest.setAttribute(ATTRIBUTE_NAME, url);
        return null;
    }

    @Override
    public void postProcess(ServerResponse response) {
        String url = servletRequest.getAttribute(ATTRIBUTE_NAME);
        System.out.println(url);
    }
}

我发现这对我的使用来说是不够的,因为当出现错误(401、500 等)时不会调用 postProcess,我最终使用了 javax.servlet.Filter

关于java - preProcess 和 postProcess 之间的 resteasy 拦截器线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21054060/

相关文章:

java - 2 个 JFrames 有 2 个单独的关闭按钮?

c++ - 获取模板类的类型

c# - 遇到意外的联锁行为?

Java:查找数组中 double 的平均值

c# - 具有 SHA-1 的 .NET RSACryptoServiceProvider 的 Java 等价物

java - Maven Hibernate 依赖项 - 选择哪一个?

Java线程同步-按正确顺序打印数字

java - 创建 RESTEasy 端点时如何限制大型正文请求?

java - 使用 @Form-RestEasy 参数绑定(bind)到 VO - JAX-Rs

java - 带有 Quarkus 的 Keycloak 管理客户端?