【发布时间】:2012-11-11 10:16:19
【问题描述】:
我正在用 allauth 构建一个 Django 应用程序。
我有一个需要身份验证的页面,我在其中放置了一个 Java 小程序。这个小程序对返回 Json 对象的其他页面(同一个 django 项目的)执行 GET 请求。
小程序使用 JSObject 从父网页获取 CSRF 令牌。
问题是我想为所有页面设置身份验证控制,但我无法从小程序的父网页获取 sessionid cookie,因此它无法执行 GET(也无法执行 POST ) 来获取(或保存)数据。
也许这是一个简单的方法来获得这个,但我是一个新手,我还没有找到任何东西。
如果您需要什么,请随意询问。
谢谢。
编辑:
我在楼下写过吗,发现sessionid cookie被标记为HTTPOnly,所以现在的问题是哪种方式让小程序最安全做 POST 和 GET 请求。 例如,可以在页面中创建一个 JS 方法,获取数据并将其传递给小程序吗? 也许以同样的方式我可以做 POST?
编辑:
我使用页面中的 jquery 调用成功获取了数据。现在的问题是代码抛出了一个InvocationTargetException。找到了问题的位置,但是不知道怎么解决。
这里是 Jquery 代码:
function getFloor() {
$.get(
"{% url ... %}",
function(data) {
var output = JSON.stringify(data);
document.mapGenerator.setFloor(output)
}
);}
这里有小程序的两个功能。 **部分是问题的根源。
public void setFloor(String input) {
Floor[] f = Floor.parse(input);
}
public static Floor[] parse(String input) {
**Gson gson = new Gson();**
Floor[] floors = gson.fromJson(input, Floor[].class);
return floors;
}
这里是我服务器上的日志,您可以在其中看到小程序尝试从服务器(而不是小程序)加载 Gson 的库
"GET /buildings/generate/com/google/gson/Gson.class HTTP/1.1" 404 4126
有人可以帮助我吗?
【问题讨论】:
-
现在,为了测试目的,我在自定义会话值中传递 sessionid 的值,但我认为这不是最可靠的方法。 ..
-
你有禁用 CSRF 中间件的选项吗?在适当的位置,您可以推出定制的中间件。
-
问题不是csrf而是sessionid。在每种情况下,我都决定在小程序实例化时使用会话值加载小程序的数据。在我的测试中,我没有发现任何使用 JQuery GET 函数的安全问题。所以我将使用 POST 结果。
-
new Gson()不太可能抛出异常,更有可能是下一行(Gson 不知道如何转换为 Floor[])。如果是您指出的那一行,则可能是您的 applet 标记(在 HTML 中)中没有包含 Gson jar 文件。
标签: java django applet session-cookies