防止反向路径中的斜杠转义

发布于 2024-12-08 00:28:34 字数 813 浏览 1 评论 0原文

在我的 Play 应用程序中,当我使用反向路由生成链接时,参数中的正斜杠会被转义,但我宁愿它们没有被转义。

例如:

<a href="@{Application.page('about/contact')}">Contact Us</a>

生成一个工作链接,但将您带到 /about%2Fcontact.html 而不是 /about/contact.html。 (在地址栏中输入 /about/contact.html 也会到达正确的位置。)

我这样做是因为我只有几个页面可以做一些有趣的事情,其余的基本上都是static——它们仅使用基本模板功能(extendsincludegetset)。由于为每个控制器和操作创建单独的控制器和操作太过分了,因此我设置了一个操作来处​​理所有控制器和操作。

public class Application extends Controller {
    public static void page(String path) {
        render("/static/" + path + ".html");
    }
}

用一条路线处理:

GET     /{<.+>path}.html                Application.page

知道如何改变事情以使斜杠不被编码吗?

In my Play app when I use reverse routing to generate links, forward slashes in parameters are being escaped, and I'd rather they weren't.

For example:

<a href="@{Application.page('about/contact')}">Contact Us</a>

generates a working link, but takes you to /about%2Fcontact.html rather than /about/contact.html. (Entering /about/contact.html in the address bar also goes to the right place.)

I'm doing this because I've only got a few pages that do anything interesting and the rest are basically static -- they only use the basic template features (extends,include,get,set). Since creating separate controllers and actions for each of them would be overkill I've set up a single action to handle all of them.

public class Application extends Controller {
    public static void page(String path) {
        render("/static/" + path + ".html");
    }
}

handled with one route:

GET     /{<.+>path}.html                Application.page

Any idea how I can change things around so that the slashes aren't encoded?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不美如何 2024-12-15 00:28:34

由于我们(显然)无法覆盖 RouteArgs 的工作方式,因此我们可以在方法中解码给定的 url,如下所示:

public class Application extends Controller {
    public static void page(String path) {
        render("/static/" + URLDecoder.decode(path, "UTF-8"); + ".html");
    }
}

但要注意安全风险! (好吧,.html 不是那么多,但以防万一......)

Since we (apparently) can't override the way RouteArgs works, we can decode the given url in the method, like this :

public class Application extends Controller {
    public static void page(String path) {
        render("/static/" + URLDecoder.decode(path, "UTF-8"); + ".html");
    }
}

But be aware of security risks! (well, .html not so much, but just in case ...)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文