2

spnego を使用して kerberos 経由でユーザーを認証する Java/Tomcat アプリケーション用のフィルターを作成しました。ユーザーが IWA (統合 Windows 認証) をオフにしている場合を除いて、これは驚くほど機能します。フィルタが最初に行うことは、ブラウザにネゴシエートさせるために SC_UNAUTHORIZED (401) を設定することです。

httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED, true);

これが発生すると、同じパスを実行して何度も失敗し、最終的に空白のページになります。私が行ったことは、失敗の数をカウントするためのセッション変数を追加することです。3 回失敗した後、SC_UNAUTHORIZED をクリアして、ページの読み込みを続行したいと考えています。これが意味することは、ユーザーがサイトにたどり着くだけで、ログインしていないということです。これは素晴らしいことです.

フラグをクリアするためにこれを試しましたが、何もしません:

System.out.println("check status 1: " + httpResponse.getStatus());
httpResponse.setStatus(HttpServletResponse.SC_OK);
System.out.println("check status 2: " + httpResponse.getStatus());

両方の出力はまだ 401 です。2 番目の出力は 200 であると予想していました。SC_UNAUTHORIZED が設定されたら、どのように変更しますか? 私は単純なものが欠けていることを知っています。

4

1 に答える 1

0

次のことを試しましたか。

httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);

basic authの場合、次の前にヘッダーを設定することもできますsendError

httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"mycustomrealm\"");
于 2012-08-28T15:56:21.277 に答える