0

是否可以在 Java Play Framework 2.x 中隐藏 url 参数?我发现了一个类似的问题,但他想隐藏它们以阻止 url 黑客攻击。所以他得到了其他答案/解决方案,而不是隐藏网址。

问题是我有一些“信息对象”,它有一个我需要传递给几个动作、jquery 等的 ID,所以我需要在 url 中有它。但我不希望任何用户看到 ID。

例如我有这个conf:

GET     /deliverablegraph           controllers.Application.deliverable_graph(id:Long,contextId:Long)

显示为 ../deliverablegraph?id=xxxx&contextId=yyyy

我只想显示 ../deliverablegraph,但需要访问 id 和 contextId。

4

1 回答 1

2

我有一个关于在 URL 中隐藏参数的类似问题,我希望我的解决方案能在某种程度上帮助你。唯一的区别是我不想传递极长的 URL 参数,因为我需要传递 JSON 数据。与您不想传递秘密信息的问题不同。

所以我做了 estmatic 在他的评论中所说的将信息放在隐藏的表单字段中:

<form class='someDynamicForm' method='post' action='@routes.Application.function()'>
    <textarea name="jsonHolder" style="display: none">
        "Used javascript to insert the data I want in here"
    </textarea>
</form>

为了获得更大的灵活性,您不必使用 abutton来提交。每当您准备好提交表单时,您都可以随时调用 javascript 代码document.someDynamicForm.submit();

现在在控制器端,您可以通过执行以下操作检索 textarea 中的信息:

public static Result function() {
    DynamicForm dynamicForm = DynamicForm.form().bindFromRequest();
    String jsonData = dynamicForm.get("jsonHolder");
    return;
}

然后在您的路线文件中确保具体:

POST       /json           controllers.Application.function()

这里的缺点是你希望你的 ID 是一个秘密。所有“黑客”所要做的就是右键单击 -> 查看页面源,他们可以在隐藏的文本字段中看到信息。

我在整个网络会话中传递信息的另一个解决方案是使用 Play 内置的Session http://www.playframework.com/documentation/2.1.x/JavaSessionFlash

您是否考虑过使用类似的东西?由于您似乎会经常使用用户的 ID,因此将他们的 ID 信息保存在 Session 中(最终暴露在他们的 cookie 中)可能需要研究一下。

于 2013-08-15T17:30:54.877 回答