Я использовал собственные реализации HttpInput.Interceptor и HttpOutput.Interceptor в Jetty 11 и более ранних версиях, переопределяя методы readFrom и write для добавления своей собственной логики.
Сейчас я перехожу на Jetty 12, где эти API больше недоступны. Есть ли альтернативный подход или рекомендуемая замена в Jetty 12 для достижения того же поведения? Как это должно быть реализовано в новой версии?
Ниже приведен пример кода, который я делаю в Jetty 9, 10, 11.
import org.eclipse.jetty.server.HttpInput;
import org.eclipse.jetty.server.Request;
import java.io.IOException;
import java.nio.ByteBuffer;
public class JettyInputInterceptor implements HttpInput.Interceptor {
private final Request baseRequest;
private final Reporting rhandler;
JettyInputInterceptor(Reporting rhandler, Request baseRequest ) {
this.rhandler = rhandler;
this.baseRequest = baseRequest;
}
@Override
public HttpInput.Content readFrom( HttpInput.Content content ) {
long handle = rhandler.getRequestHandle();
if( content.hasContent() && handle != 0L ) {
int size = content.remaining();
byte[] body = new byte[size];
content.get( body, 0, size );
ReturnValue rv = Native.filterBody( handle, body );
if( rv.getAction() == NativeThing.ACTIONI ) {
ByteBuffer buf = ByteBuffer.wrap( rv.getValue() );
return new HttpInput.Content( buf );
} else if( rv.getAction() == NativeThing.ACTIONII ) {
try {
baseRequest.getResponse().setStatus( SC_BAD_REQUEST );
baseRequest.getResponse().closeOutput();
} catch( IOException e ) {
e.printStackTrace();
}
}
return new HttpInput.Content( ByteBuffer.wrap( body ) );
}
return content;
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... put-interc