2016-07-28 4 views
8

私はGWTで開発されたサードパーティアプリケーションで動作するようにWindows認証を取得しようとしています。 私はWindowsサーバー上でtomcatを使ってアプリケーションをホストしています。私は、IISプロキシ(Tomcatのドキュメントの後にインストールされています)を介してサイトにアクセスします。何故、tomcat windowsサービスアカウントを返すrequest.getRemoteUser()が時々

"<%= request.getRemoteUser()%>"を表示するようにwebappの.jspを変更した場合、私のユーザー名は私のWindowsアカウントになります。

しかし、webappはサーバーでTomcat Windowsサービスをインストールしたアカウントで私を認証します。

webappの(逆コンパイルされた)ソースコードでは、まったく同じ "request.getRemoteUser()"への呼び出しがあるので、どこに違いがあるのだろうかと思います。ここで

を逆コンパイル、クラスされています

import javax.servlet.http.HttpServletRequest; 

public class RemoteUserLoginProvider 
    extends BaseRequestLoginProvider 
{ 
    public String extractLoginFromRequest(HttpServletRequest request) 
    { 
    return request.getRemoteUser(); 
    } 
} 

そして:はhttps://github.com/google/guice/issues/780

import com.google.inject.Inject; 
import com.google.inject.Provider; 
import javax.servlet.http.HttpServletRequest; 

public abstract class BaseRequestLoginProvider 
    implements Provider<String> 
{ 
    @Inject 
    private Provider<HttpServletRequest> requestProvider; 

    public abstract String extractLoginFromRequest(HttpServletRequest paramHttpServletRequest); 

    public String get() 
    { 
    HttpServletRequest request = (HttpServletRequest)this.requestProvider.get(); 
    String userlogin = extractLoginFromRequest(request); 

    return userlogin; 
    } 
} 

私の問題は、GoogleのGuiceの上でこのバグにリンクしていませんか?

もしそうなら、回避策はありますか?

+0

私はここで私の質問に言い換えました:追加のテストの後、私はここに私の質問を言い換えました:http://stackoverflow.com/questions/38664679/request-getremoteuser-returns-a-different-login-in-jsp-than-in-a-servlet-filt問題がguice/gwtにあった可能性を除外します。 – Laloutre

答えて

0

HttpServletRequest.getRemoteUser()は通常、CGI REMOTE_USER変数(HTTP基本認証のユーザー名)と同じ値を返します。別の値にしたいと思うように思えます。つまり、何かがHttpServletRequestオブジェクトを変更しているということです。これはサーブレット・フィルターによって実現される可能性が最も高いです。

そのGuiceのバグが犯人である場合は、それを回避するために十分に簡単です:単にGuiceFilterはどんなフィルターが要求を認証し、HttpServletRequestオブジェクトを変更され後にインストールされていることを確認してください。

一般的な経験則として、このような要求を変更することは良い考えではないと思います。何か問題が発生したときにデバッグするのが難しいからです。代わりに、@RequestScopedプロバイダがリクエストから必要な値を抽出し、必要な認証を行った場合は、代わりに依存性注入によってユーザ情報を消費する可能性があります。あるいは、より一般的には、既存のオブジェクトを変更するよりも、新しい(好ましくは不変の)値を作成することを常に好みます。

関連する問題