0

我正在使用 django 提供经过身份验证的图像。该图像位于需要登录的视图后面,最后我必须检查的不仅仅是身份验证。由于此处解释复杂的原因,我不能使用图像的真实 url,但我正在使用自定义 url 提供它,该自定义 url 导致经过身份验证的视图。

从 java 中,图像必须是可访问的,才能保存或显示。对于这一部分,我使用 Apache httpclient。

在 Apacahe 中,我尝试了很多东西(每个示例和示例组合......),但似乎无法使其正常工作。对于 webapp 的其他部分,我使用 django-rest-framwork,我成功地从 java(以及 c 和 curl)连接到它。

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

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

这就是我在 django 中所做的:

在 urls.py 中:

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

在views.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,身份验证协商,跟随重定向......等等......

我在这里忽略了一些基本的东西吗?...似乎网站客户端的登录不适合自动登录...

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

4

1 回答 1

0

最后的问题是,使用 HTTP 授权。login_required 装饰器中默认不使用它。

添加一个自定义装饰器来检查 HTTP 授权就可以了:

看这个例子:http ://djangosnippets.org/snippets/243/

于 2013-03-04T14:28:48.293 回答