如果我有一个同时实现前处理和后处理的类,我是否能够在 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/