这个线程是有点老了,但我有一段时间拦截之前和之后的请求。在网络上经过长时间的搜寻之后,我终于想通了这一点:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>blah.LoggingFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>blah.LoggingFilter</param-value>
</init-param>
,然后这个类:
public class LoggingFilter extends LoggingFilter implements ContainerRequestFilter {
private static final ThreadLocal<Long> startTime = new ThreadLocal<Long>();
public static boolean verboseLogging = false;
@Override
public ContainerRequest filter(ContainerRequest arg0) {
startTime.set(System.currentTimeMillis());
return arg0;
}
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
System.out.println(System.currentTimeMillis() - startTime.get().longValue());
StringBuilder sb = new StringBuilder();
sb.append("User:").append((request.getUserPrincipal() == null ? "unknown" : request.getUserPrincipal().getName()));
sb.append(" - Path:").append(request.getRequestUri().getPath());
//...
}
这拦截在开始请求和结束,所以你可以把一个计时器管他呢。
这适用于泽西岛1.17。不确定关于2.x.
你想要什么样的筛选,验证,拒绝?例如,您可以创建自己的MessageBodyWriter/Reader来处理验证。或者,您可以在构造函数中为自定义HTTP标头解析或URI解析设置@Context。 – Marc 2010-12-05 09:53:34
此功能的大多数应用程序将与安全性有关。例如,我的(非泽西岛)Web应用程序将为泽西岛的某些AJAX调用(全部在相同路径下)生成一次性使用的随机数。拦截器将负责检查这个随机数的有效性。 – cww 2010-12-05 10:04:51
@Marc可以告诉你更多关于“或者你可以在构造函数中为自定义HTTP头解析或URI解析设置@上下文”的部分吗? – Mat 2012-12-20 15:42:55