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

使用ApacheHTTP客户端从java打开django提供的经过身份验证的映像,java,django,authentication,apache-httpclient-4.x,Java,Django,Authentication,Apache Httpclient 4.x,我正在使用django提供经过身份验证的图像。该图像位于需要登录的视图后面,最后我必须检查更多的内容,而不仅仅是身份验证。 由于这里要解释的原因很复杂,我无法使用图像的真实url,但我使用一个自定义url来提供它,该url指向经过身份验证的视图 要保存或显示,必须可以从java访问图像。对于这一部分,我使用ApacheHttpClient 在阿帕卡,我尝试了很多东西(每一个例子和例子的组合…),但似乎都无法奏效。 对于webapp的其他部分,我使用django rest框架,我成功地从java(

我正在使用django提供经过身份验证的图像。该图像位于需要登录的视图后面,最后我必须检查更多的内容,而不仅仅是身份验证。 由于这里要解释的原因很复杂,我无法使用图像的真实url,但我使用一个自定义url来提供它,该url指向经过身份验证的视图

要保存或显示,必须可以从java访问图像。对于这一部分,我使用ApacheHttpClient

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

我在django中使用了login_reuired decorator,这使得访问url的尝试首先重定向到登录页面

在webviewer中尝试链接和登录,我在服务器控制台中看到200代码(OK)。 尝试与httpclient的链接,我在控制台中找到一个302。。。。(查找302,表示重定向…)

这就是我在django所做的:

在URL.py中:

url(r'^photolink/(?P<filename>.*)$', 'myapp.views.photolink',name='photolink'),
顺便说一句,如果我得到这个工作,我需要另一个装饰通过一些其他测试。。。。 但我首先需要让这东西运转起来

现在它还不是一个安全的url。。。。纯http

在java中我尝试了很多东西。。。使用apache的httpclient 4.2.1 代理、cookies、身份验证协商,以及后续重定向。。。等等

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


因此,问题可能出现在django中的我的代码中……或者出现在java代码中……

最后,问题是使用HTTP授权。 默认情况下,它不用于登录所需的装饰程序

添加一个检查HTTP授权的自定义修饰符实现了以下目的:

请参见此示例:

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)