Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在应用程序引擎文件上载期间登录用户_Java_Security_Google App Engine - Fatal编程技术网

Java 在应用程序引擎文件上载期间登录用户

Java 在应用程序引擎文件上载期间登录用户,java,security,google-app-engine,Java,Security,Google App Engine,我正在编写一个googleappengine应用程序,它使用formpost和createUploadUrl方法将文件上传到Blobstore。在处理上载的HttpServlet中,UserService.getCurrentUser和getUserPrincipal返回null。用户已登录,其他RemoteServiceServlet调用可以检索该用户。如何在上载过程中获取登录的用户名?如果所有其他操作都失败,您可以将其与表单一起作为参数发送,或将该名称添加到可在处理程序中检索的会话对象中。但

我正在编写一个googleappengine应用程序,它使用formpost和createUploadUrl方法将文件上传到Blobstore。在处理上载的HttpServlet中,UserService.getCurrentUser和getUserPrincipal返回null。用户已登录,其他RemoteServiceServlet调用可以检索该用户。如何在上载过程中获取登录的用户名?

如果所有其他操作都失败,您可以将其与表单一起作为参数发送,或将该名称添加到可在处理程序中检索的会话对象中。但是,在HTTP POST(python)中获得用户名就像在其他任何地方一样对我有效,并且使用Java也应该同样有效

但无论如何,您有3种选择: -普通的方法应该有效 -如果失败,在表单提交页面获取用户名,并将其与表单一起发布 -如果所有其他操作都失败,请使用会话对象,从中可以检索用户名


理想的解决方案是第一种,另外两种是一种变通方法,因为你这样做应该是可行的

我假设您仅在本地开发模式下获得此功能。如果是这样,下面是解释(和解决方案):用户登录到127.0.0.1,但是为新上传到blobstore返回的URL(在本地模式下)包含计算机名。因此,在从blobstore到上载处理程序的POST重定向过程中,会话被中断,并且您的服务不再识别该用户正在登录

这里有一个解决办法。下面的方法位于服务器上,可以通过RPC(从GWT应用程序)或servlet直接调用:

public String getNewUploadLink() {
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    String url = blobstoreService.createUploadUrl("/myappname/upload");
    String modifiedUrl = url.replace("ThisIsMyComputerName", "127.0.0.1"); 
    return modifiedUrl;
}

您可以看到,它在将URL返回到客户端之前会对其进行操作。更好的版本会检查服务是否在开发或生产模式下运行,然后采取相应措施,但它会突出显示此问题的根本原因,以便您可以在本地计算机上继续开发。

感谢您的回复。我想传递用户id,但这是用于身份验证的,似乎不安全。看起来post请求与其他请求的会话不同。我是否缺少将所有服务器请求放在同一个会话中的内容?您正在尝试的应该可以工作。我可以试着写一个工作的例子,如果你仍然没有得到它的工作。如果不熟悉Java的细节,但我可以让它工作,因为我用Python就是这么做的,如果我们看一下Python和Java版本的AppEngine,API的工作原理是非常相似的。在Python中,我只是在blobstoreuploadhandler中的HTTP POST过程中获得当前用户,它可以工作,所以如果您可能发布代码,我们可以试试吗?