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 Software Foundation\Apache2.2\modules. 必要な構成は上記のセクションに含まれています。(Apache の以降のバージョンには含まれているようです。)

mod_proxy_html は厳密には必要ないかもしれません – ProxyPassReverse ディレクティブは私が考える重要なものです – そのため、問題が発生する場合は、LoadModule/Include を実行する 3 行を削除し、Location セクションの ProxyHTML 行を削除できます。

于 2012-12-21T12:43:58.193 に答える