java - Jetty URL 重写/重定向去除查询字符串

标签 java jetty url-rewriting embedded-jetty

我目前正在与 Jettys 作斗争 rewrite mechanisms 。基本上我想要 URL
http://localhost:8080/membership/payment?id=5000 替换为 http://localhost:8080/#/membership/payment?id=5000

我当前的方法如下:

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

RewriteRegexRule replace = new RewriteRegexRule();
replace.setRegex("/membership/(.*)");
replace.setReplacement("/#/membership/$1");
rewrite.addRule(replace);

总的来说,这是有效的,唯一缺少的是要传递到新位置的查询字符串 (?id=5000)。

如何保留新位置的查询字符串?

最佳答案

好的,我找到了解决方案:

private static ContextHandlerCollection prepareContexts() {

    MovedContextHandler handler = new MovedContextHandler();
    handler.setContextPath("/membership");
    handler.setNewContextURL("/#/membership");
    handler.setPermanent(true);
    handler.setDiscardPathInfo(false);
    handler.setDiscardQuery(false);

    WebAppContext webAppContext = new WebAppContext();
    webAppContext.setServer(server);
    webAppContext.setContextPath("/");
    webAppContext.setWar("src/main/webapp");

    ContextHandlerCollection contexts = new ContextHandlerCollection();
    contexts.setHandlers(new Handler[] { handler, webAppContext });

    return contexts;
}

之后必须分配上下文:

server.setHandler(prepareContexts();

关于java - Jetty URL 重写/重定向去除查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689631/

相关文章:

java - Browsermob代理(java): failing to rewrite a URL

java - get 无法访问 EntityBean 错误,其中删除 javaEbean 依赖项

Java ProcessBuilder 安全威胁?

JavaFX WebView 弹出处理程序未尝试加载页面

MySQL 无法在 Jetty 上使用 utf8mb4 字符串更新记录

magento - 仅从前端而不是在 magento 的后端删除 index.php

javascript - Vertx 事件总线 access_denied

java - WireMock 的嵌入式 Jetty 服务器在 Android ApplicationTestCase 期间不会 .stop()

java - 将测试类路径添加到 Cargo 运行的 Jetty

javascript - 为 Ajax 应用程序启用后退/前进键事件