2017-01-17 5 views
0

すべてのリクエストを傍受するように設定されたサーブレットフィルタ(コントローラ/メソッドなどはありません)が1つしかないSpring Webアプリケーションがあります。Springサーブレットフィルタを使用してブラウザの接続をリセットする

// Groovy pseudo-code, but that shouldn't matter, all the logic is there 
// and we know it works (no compiler errors) because I can go to localhost:8080 
// in a browser and see it. 
@Override 
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    println 'I am being invoked to filter the response!' 

    HttpServletResponse httpServletResponse = response as HttpServletResponse 
    String htmlResponse = """ 
    <html> 
    <head><title>Hello!</title></head> 
    <body> 
     Hello from filter land! 
    </body> 
    </html> 
    """ 

    httpServletResponse.writer.write(htmlResponse) 
    httpServletResponse.writer.flush() 
} 

私はアプリを起動し、http://localhost:8080に私のブラウザをポイント は、私が期待されるHTMLを取得(読み込みメッセージ「フィルタの土地からこんにちは!」)。私はまたprintlnが私のコンソール出力に現れるのを見る。

私は、その後の曲私のブラウザ(FireFoxの)Preferences >> Networkに行くと、これらのconfigsを使用して、すべてのHTTPトラフィックのために、このプロキシを使用するには:

enter image description here

私はOKをヒットし、その後http://example.comに移動し、「取得します接続がリセットされました "エラー。 Web Developer >> Networkツールでは、あまり情報がありません。それは私がhttp://example.com(またはその他のHTTPサイト)に行くとき、私は、Firefoxを介して出力をコンソールにprintlnプリントが表示されませんことに注意することも重要です

enter image description here

:ちょうど基本的に、接続不良を示しています。ブラウザが正しくフィルタに「当たっている」ようには見えません。

なぜ私のサーブレットフィルタはhttp://localhost:8080に対して動作していますが、私のブラウザがそれを使用するためにプロキシされているのではないのですか?最初に、サーブレットフィルタやSpringをどのように使用しているのか、アプリ層に問題があるかどうかを判断しようとしています。

+1

このようなフィルタを正確に学んだことはありますか?私はこのような "Hello World"フィルタを自己尊重の学習リソースで見たことがありません。フィルターはHTTPエンドポイントではありません。あなたのフィルタは、基本的に、目的のHTTPエンドポイント(例えば、サーブレットインスタンス、JSPファイル、HTMLファイルなど)へのリクエストを続行するために命令を待っています。代わりにHTTPサーブレットを使用してください。ところで、サーブレットとフィルタのどちらも、Springとは何の関係もありません。 Java EE以上のSpringを好むなら、HTTPサーブレットの代わりにSpringコントローラを使うだけです。 – BalusC

+0

私は全く同じプロキシフィルタを作成し、同じFirefoxプロキシ設定で実行しましたが、example.comに行ったときにFirefox、ChromeまたはSafariで表示されるエラーは発生しません。私は、Spring CLIアプリケーションを使用して、GroovyフィルタをSpring Bootアプリケーションの唯一の@Componentとしてテストしています。アプリサーバーには何を使用していますか?それがコンソールに印刷されていないという事実は、問題がおそらくアプリケーションコードにないことを私に伝えます。 –

答えて

関連する問題