【发布时间】:2021-09-25 19:24:20
【问题描述】:
我正在做一个项目,我们将使用 Jetty AbstractHandler 拦截所有请求以进行验证。
以下是基本的处理程序声明:
public class HandlerClass extends AbstractHandler
{
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
String requestURI = request.getRequestURI();
LOG.debug("Request Handler received");
try
{
if (!getStatus())
{
response.setContentType(MediaType.APPLICATION_JSON);
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
ErrorBuilder errorBuilder = new ErrorBuilder();
Schema schema = errorBuilder.getErrorInstance(Status.FORBIDDEN.getStatusCode(), "forbidden", "Authorization failed", "Request not allowed.");
String responseData = new Gson().toJson(schema);
response.getOutputStream().print(responseData);
response.flushBuffer();
baseRequest.setHandled(true);
}
}
catch (Exception e)
{
System.out.print(e);
}
}
}
下面是jetty.xml的绑定:
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New class="handlers.HandlerClass"/>
</Item>
</Array>
</Set>
</New>
</Set>
我可以看到所有请求都在处理程序方法中进行拦截,但如果getStatus() 返回 true,则请求不会从处理程序转到下一个处理程序。
如果getStatus() 返回 false,那么我可以根据我的代码看到错误响应。
我不确定我在哪里做错了,或者我错过了什么配置,因为在getStatus() 返回 true 的情况下哪个请求没有来自处理程序类。
注意:“getStatus()”是一种自定义方法,在某些条件下返回真或假。
【问题讨论】:
-
什么是
getStatus()?这不是 Jetty 的AbstractHandler上的方法。 -
@Joakim 不,这是一个自定义方法,在某些条件下返回真或假。
标签: java jetty handler jetty-9