嵌入式码头重写无法正常工作(Embedded Jetty rewrites not working

2019-08-07 14:53发布

我想实现在嵌入式Jetty服务器简单的重写规则,下面的码头文档的例子。

我想请求/admin/重写到/admin.html。 此时如果我请的那一刻/admin/我得到一个404错误与/admin.html没有找到。 但是,如果我要求/admin.html直接,它的作品!

有计算器上2个其他类似的职位,但没有答案的问题!

下面的代码:

WebAppContext _ctx = new WebAppContext();
_ctx.setContextPath("/");
_ctx.setDefaultsDescriptor(JETTY_DEFAULTS_DESCRIPTOR);
_ctx.setParentLoaderPriority(true);       
_ctx.setWar(getShadedWarUrl());
_ctx.setResourceBase(getShadedWarUrl());

RewriteHandler rewriter = new RewriteHandler();
rewriter.setRewritePathInfo(true);
rewriter.setRewriteRequestURI(true);
rewriter.setOriginalPathAttribute("requestedPath");

RewritePatternRule admin = new RewritePatternRule();
admin.setPattern("/admin/");
admin.setReplacement("/admin.html");
admin.setTerminating(true); // this will stop Jetty from chaining the rewrites
rewriter.addRule(admin);

_ctx.setHandler(rewriter);

HandlerCollection _handlerCollection = new HandlerCollection();
_handlerCollection.setHandlers(new Handler[] {_ctx});
server.setHandlers(_result);

Answer 1:

更换2号线...

_ctx.setHandler(rewriter);
_handlerCollection.setHandlers(new Handler[] {_ctx});

rewriter.setHandler(_ctx);
_handlerCollection.setHandlers(new Handler[] {rewriter});

这将使重写规则,正常情况下的处理之前一命呜呼

想想内容处理的树。 在你的示例代码,你有....

server
+--  HandlerCollection
     [0]-- WebAppContext
           +-- Your servlets and filters in web.xml
           +-- DefaultServlet
               +-- RewriteHandler

这意味着如果WebAppContext无法处理请求,则RewriteHandler执行,看它是否可以处理请求。 这永远不会发生,因为WebAppContext是设置为使用DefaultServlet如果没有其他匹配。

建议简单的改变将改变树看起来像这样...

server
+--  HandlerCollection
     [0]-- RewriteHandler
           +-- WebAppContext
               +-- Your servlets and filters in web.xml
               +-- DefaultServlet

这将允许RewriteHandler做它的事之前, WebAppContext甚至问。

注意:你也可以有你的代码利用HandlerCollection多一点正确的这种情况下也是如此。

// _ctx.setHandler(rewriter);
// rewriter.setHandler(_ctx);
_handlerCollection.setHandlers(new Handler[] { rewriter, _ctx });

这将导致下面的树

server
+--  HandlerCollection
     [0]-- RewriteHandler
     [1]-- WebAppContext
           +-- Your servlets and filters in web.xml
           +-- DefaultServlet


文章来源: Embedded Jetty rewrites not working properly