防止在反向路线中逃避斜线

时间:2011-10-05 18:09:09

标签: java escaping routes playframework

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

例如:

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

生成有效链接,但会转到/about%2Fcontact.html而不是/about/contact.html。 (在地址栏中输入/about/contact.html也会到达正确的位置。)

我这样做是因为我只有几个页面可以做任何有趣的事情而其余部分基本上都是静态的 - 它们只使用基本的模板功能(extendsinclude,{ {1}},get)。因为为每个控件创建单独的控制器和操作会有点过分,所以我设置了一个单独的操作来处理所有控制器和操作。

set

用一条路线处理:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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