Jersey框架的攔截器(Interceptor)允許你在處理HTTP請求之前或之后執行特定的代碼。這對于身份驗證、日志記錄、性能監控等場景非常有用。要使用Jersey攔截器,請按照以下步驟操作:
ContainerRequestFilter
或ContainerResponseFilter
接口。ContainerRequestFilter
用于處理請求前的操作,而ContainerResponseFilter
用于處理響應后的操作。import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseFilter;
import java.io.IOException;
public class MyInterceptor implements ContainerRequestFilter, ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
// 在處理請求之前執行的操作
System.out.println("Request intercepted: " + requestContext.getRequestURI());
}
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
// 在處理響應之后執行的操作
System.out.println("Response intercepted: " + responseContext.getStatus());
}
}
@Provider
注解標記攔截器類,并將其添加到應用程序的資源類列表中。import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
@ApplicationPath("/api")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
classes.add(MyInterceptor.class);
// 添加其他資源類和提供者
return classes;
}
}
現在,每當有請求進入或離開應用程序時,Jersey都會調用MyInterceptor
類中的相應方法。你可以在這些方法中執行任何需要的操作,例如記錄日志、驗證用戶身份等。