java - 防止在反向路由中转义斜线

标签 java escaping routes playframework

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

例如:

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

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

我这样做是因为我只有几个页面可以做任何有趣的事情,其余的基本上是静态的——它们只使用基本的模板特性(extendsinclude ,获取,设置)。由于为它们中的每一个创建单独的 Controller 和操作会有点矫枉过正,所以我设置了一个操作来处​​理所有它们。

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

用一条路线处理:

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

知道如何更改周围的内容以便不对斜杠进行编码吗?

最佳答案

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

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

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

关于java - 防止在反向路由中转义斜线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665677/

相关文章:

java - 解决比较器不为相等的元素返回 0

java - 温度转换在 JFrame 中无法正常工作

delphi - 在 Delphi 7 中,如何转义 Format 函数中的百分号 (%)?

java - Java 查找所有可能的路线

asp.net - 如何使用带有查询字符串的路由 ASP.NET 4 WebForms?

java - 从 WebView 保存图像

java - 通过 JSCh 将密码传递给 shell 脚本

asp.net-mvc - 您如何使用 Razor 在网址中转义 '@' 符号

javascript - Kendo 模板中的转义反斜杠

ruby-on-rails - 带参数的 Rails 自定义路由