使用Apachehttp客户端从java打开django提供的经过身份验证的映像



我正在使用django提供经过身份验证的映像。图像位于需要登录的视图后面,最后我必须检查的不仅仅是身份验证。由于这里要解释的原因很复杂,我不能使用图像的真实url,但我正在使用一个自定义url为其提供服务,从而获得经过身份验证的视图。

从java中,图像必须是可访问的,才能保存或显示。在这部分中,我使用Apachehttpclient。

在Apacahe,我尝试了很多东西(每个例子和例子的组合…),但似乎都无法奏效。对于web应用程序的其他部分,我使用django-rest框架,我成功地从java(以及c和curl)连接到了它。

我在django中使用了login_reired装饰器,它首先尝试将url重定向到登录页面。

在webviewer中尝试链接和登录,我在服务器控制台中看到200代码(OK)。尝试使用httpclient的链接,我在控制台中得到一个302 Found。。。。(查找302,意味着重定向。)

这就是我在django:所做的

在urls.py:中

url(r'^photolink/(?P<filename>.*)$', 'myapp.views.photolink',name='photolink'),

在视图中.py:

import mimetypes
import os
@login_required
def photolink(request, filename):
    # from the filename I get the image object, for this question not interesting
    # there is a good reason for this complicated way to reach a photo, but not the point here
    filename_photo = some_image_object.url
    base_filename=os.path.basename(filename_photo)
    # than this is the real path and filename to the photo:
    path_filename=os.path.join(settings.MEDIA_ROOT,'photos',mac,base_filename)
    mime = mimetypes.guess_type(filename_photot)[0]
    logger.debug("mimetype response = %s" % mime)
    image_data = open(path_filename, 'rb').read()
    return HttpResponse(image_data, mimetype=mime)

顺便说一句,如果我能做到这一点,我需要另一个装饰师来通过一些其他测试。。。。但我首先需要把这件事做好。。。。

目前,它不是一个安全的url。。。。纯http。

在java中,我尝试了很多东西。。。使用apache的httpclient 4.2.1代理,cookie,身份验证协商,带有follow重定向。。。等等…

我是不是忽略了一些基本的东西?。。。网站客户端的登录似乎不适合自动登录。。。

所以问题可能出现在我在django中的代码中。。。。或者在java代码中。。。。

最终问题是使用HTTP授权。默认情况下,在login_requested装饰器中不使用它。

添加一个检查HTTP授权的自定义装饰器就成功了:

请参见此示例:http://djangosnippets.org/snippets/243/

相关内容

最新更新