下面列出了怎么用org.eclipse.jetty.server.HttpChannel的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes,
MethodInterceptResult result) throws Throwable {
HttpChannel httpChannel = (HttpChannel) objInst;
HttpServletRequest servletRequest = httpChannel.getRequest();
ContextCarrier contextCarrier = new ContextCarrier();
CarrierItem next = contextCarrier.items();
while (next.hasNext()) {
next = next.next();
next.setHeadValue(servletRequest.getHeader(next.getHeadKey()));
}
AbstractSpan span = ContextManager.createEntrySpan(servletRequest.getRequestURI(), contextCarrier);
Tags.URL.set(span, servletRequest.getRequestURL().toString());
Tags.HTTP.METHOD.set(span, servletRequest.getMethod());
span.setComponent(ComponentsDefine.JETTY_SERVER);
SpanLayer.asHttp(span);
}
private Request testRequest(String scheme, int responseCode, String httpMethod, String path) throws Exception {
HttpChannel channel = new HttpChannel(connector, new HttpConfiguration(), null, new DummyTransport());
MetaData.Request metaData = new MetaData.Request(httpMethod, new HttpURI(scheme + "://" + path), HttpVersion.HTTP_1_1, new HttpFields());
Request req = channel.getRequest();
req.setMetaData(metaData);
this.httpResponseCode = responseCode;
channel.handle();
return req;
}
private void invoke(ServiceRequestContext ctx, HttpResponseWriter res,
ArmeriaHttpTransport transport, HttpChannel httpChannel) {
final Queue<HttpData> out = transport.out;
try {
server.handle(httpChannel);
httpChannel.getResponse().getHttpOutput().flush();
final Throwable cause = transport.cause;
if (cause != null) {
throw cause;
}
final HttpHeaders headers = toResponseHeaders(transport);
if (res.tryWrite(headers)) {
for (;;) {
final HttpData data = out.poll();
if (data == null || !res.tryWrite(data)) {
break;
}
}
}
} catch (Throwable t) {
logger.warn("{} Failed to produce a response:", ctx, t);
} finally {
res.close();
}
}
@Override
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes,
Object ret) throws Throwable {
HttpChannel httpChannel = (HttpChannel) objInst;
HttpServletResponse servletResponse = httpChannel.getResponse();
AbstractSpan span = ContextManager.activeSpan();
if (IS_SERVLET_GET_STATUS_METHOD_EXIST && servletResponse.getStatus() >= 400) {
span.errorOccurred();
Tags.STATUS_CODE.set(span, Integer.toString(servletResponse.getStatus()));
}
ContextManager.stopSpan();
ContextManager.getRuntimeContext().remove(Constants.FORWARD_REQUEST_FLAG);
return ret;
}
@Override
public void handle(HttpChannel channel) throws IOException, ServletException {
if(prohibitedMethods.contains(channel.getRequest().getMethod().toUpperCase())) {
channel.getRequest().setHandled(true);
channel.getResponse().setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
} else {
super.handle(channel);
}
}
@Override
HttpServletRequest toHttpServletRequest(Object[] args) {
if (args == null || args.length < 1) {
return null;
}
if (args[0] instanceof HttpChannel) {
final HttpChannel<?> channel = (HttpChannel<?>) args[0];
return channel.getRequest();
}
return null;
}
@Override
HttpServletResponse toHttpServletResponse(Object[] args) {
if (args == null || args.length < 1) {
return null;
}
if (args[0] instanceof HttpChannel) {
final HttpChannel<?> channel = (HttpChannel<?>) args[0];
return channel.getResponse();
}
return null;
}
private Request getCurrentRequest() {
try {
HttpConnection con = HttpConnection.getCurrentConnection();
HttpChannel channel = con.getHttpChannel();
return channel.getRequest();
} catch (Throwable t) {
//
}
return null;
}
@Override
protected Authentication createAuthentication(UserIdentity userIdentity, Request request) {
return new KeycloakAuthentication(getAuthMethod(), userIdentity) {
@Override
public void logout() {
logoutCurrent(HttpChannel.getCurrentHttpChannel().getRequest());
}
};
}
@Override
public Authentication createAuthentication(UserIdentity userIdentity, Request request) {
return new KeycloakAuthentication(getAuthMethod(), userIdentity) {
@Override
public void logout() {
logoutCurrent(HttpChannel.getCurrentHttpChannel().getRequest());
}
};
}
private Response createResponseMock() {
Response response = mock(Response.class);
when(response.getHttpChannel()).thenReturn(mock(HttpChannel.class));
when(response.getCommittedMetaData()).thenReturn(mock(MetaData.Response.class));
return response;
}
private Response newResponse() {
return new Response(new HttpChannel(null, new HttpConfiguration(), null, null), null);
}
@Override
protected Request resolveRequest(ServletRequest req) {
return (req instanceof Request) ? (Request)req : HttpChannel.getCurrentHttpChannel().getRequest();
}
@Override
protected Request resolveRequest(ServletRequest req) {
return (req instanceof Request) ? (Request)req : HttpChannel.getCurrentHttpChannel().getRequest();
}