gpt4 book ai didi

jetty - 在 Jetty 中使用 ResourceHandler 和自定义处理程序时,根请求出现 403 错误

转载 作者:行者123 更新时间:2023-12-02 01:25:14 28 4
gpt4 key购买 nike

在(嵌入式)Jetty 中,我尝试使用 ResourceHandler 来提供静态文件,并使用自定义处理程序来响应动态请求。基于this page我的设置如下所示:

public static void main(String[] args) throws Exception
{
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(8080);
server.addConnector(connector);

ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setDirectoriesListed(false);

resource_handler.setResourceBase(".");

HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resource_handler, new MyHandler() });
server.setHandler(handlers);

server.start();
server.join();
}

从正确的意义上来说,这是有效的:

  • 提供公共(public)目录中文件的静态内容,例如/public/style.css
  • 在公共(public)目录中不存在的路径上运行 MyHandler,例如/foo/bar

问题是我收到 403 响应根路径 (/)。 MyHandler 能够响应这些请求,但它们首先被 ResourceHandler 拦截。有没有办法强制 Jetty 向 MyHandler 发送/请求?

提前致谢!

最佳答案

Jetty 按顺序尝试每个处理程序,直到其中一个处理程序对请求调用 setHandled(true)。不知道为什么 ResourceHandler 不为“/”执行此操作。

我的解决方案是颠倒处理程序列出的顺序,以便首先调用您的处理程序。然后检查 URL 中的特殊情况“/”。如果您想将请求传递给 ResourceHandler,只需返回,而不声明请求已处理。

像这样声明处理程序的顺序:

Server server = new Server(8080);

CustomHandler default = new CustomHandler();
default.setServer(server);

ResourceHandler files = new ResourceHandler();
files.setServer(server);
files.setResourceBase("./path/to/resources");

HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] {default, files});

server.setHandler(handlers);

server.start();
server.join();

并像这样定义 CustomHandler 的句柄方法:

public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
if(!request.getRequestURI().equals("/")){
return;
}
// Do Stuff...
baseRequest.setHandled(true);
return;
}

我同意让 ResourceHandler 简单地在“/”上屈服而不是使用 403 处理响应是最优雅的。

关于jetty - 在 Jetty 中使用 ResourceHandler 和自定义处理程序时,根请求出现 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766477/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com