1

我需要从我的 Django 站点打开 SQLServer 报告。我可以通过在会话中存储 URL 后重定向到 Django 视图中的报表服务器 URL 来做到这一点,即:

def show_report(request):     
    return redirect(request.session.get('_reporturl'))

这工作正常,但我想避免 ReportServer 提示输入用户名和密码。我已经得出结论(可能是错误的)最好的方法是使用 HTTP 基本身份验证。

我在另一篇基本身份验证的帖子中找到了以下代码:

import urllib2, base64
username = '<username>'
password = '<password>'
request = urllib2.Request(request.session.get('_reporturl'))
base64string = base64.standard_b64encode('%s:%s' % (username, password))
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)

但是我不能让它在视图中工作(Django 视图需要返回一个 HTTPResponse,所以我不确定如何使用这个代码)。

我尝试了以下方法:

return redirect('http://<username>:<password>@' + request.session.get('_reporturl'))

这似乎将基本身份验证数据传递给报表服务器,但我收到了几个进一步的用户名和密码提示。

是否有人设法在 Django 中使用基本身份验证,或者是否有人设法在没有提示进行身份验证的情况下打开 SQLServer 报告?

4

1 回答 1

0

通过将 Apache 配置为代理到报表服务器来解决此问题:

LoadModule proxy_html_module modules/mod_proxy_html/mod_proxy_html.so
LoadModule xml2enc_module modules/mod_proxy_html/mod_xml2enc.so
Include modules/mod_proxy_html/proxy_html.conf

# set up proxy for SQL Server reports
<Location /ReportServer/>
  ProxyPass http://<reportserver>/ReportServer/
  ProxyPassReverse http://<reportserver>/ReportServer/
  SetEnv force-proxy-request-1.0  1
  SetEnv proxy-nokeepalive        1
  SetEnv proxy-initial-not-pooled 1
  ProxyHTMLEnable On
  ProxyHTMLURLMap http://<reportserver>/ReportServer/ /ReportServer/
  # Base64 encoding of "username:password"
  RequestHeader set Authorization "Basic <base64 encoded string>"
</Location>

mod_proxy_html 是从http://www.apachelounge.com/download/win32/modules-2.2/mod_proxy_html-3.1.2-win32.zip下载的第三方模块- 打开 zip 并转储 Program Files (x86) 下的 mod_proxy_html 文件夹\Apache 软件基金会\Apache2.2\modules。必要的配置包含在上面的部分中。(它似乎包含在更高版本的 Apache 中。)

mod_proxy_html 可能不是绝对必要的——我认为 ProxyPassReverse 指令是重要的——所以如果它导致问题,您可以删除执行 LoadModule/Include 的三行并删除 Location 部分中的 ProxyHTML 行。

于 2012-12-21T12:43:58.193 回答