すべてのリクエストを傍受するように設定されたサーブレットフィルタ(コントローラ/メソッドなどはありません)が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トラフィックのために、このプロキシを使用するには:
私はOK
をヒットし、その後http://example.com
に移動し、「取得します接続がリセットされました "エラー。 Web Developer >> Network
ツールでは、あまり情報がありません。それは私がhttp://example.com
(またはその他のHTTPサイト)に行くとき、私は、Firefoxを介して出力をコンソールにprintln
プリントが表示されませんことに注意することも重要です
:ちょうど基本的に、接続不良を示しています。ブラウザが正しくフィルタに「当たっている」ようには見えません。
なぜ私のサーブレットフィルタはhttp://localhost:8080
に対して動作していますが、私のブラウザがそれを使用するためにプロキシされているのではないのですか?最初に、サーブレットフィルタやSpringをどのように使用しているのか、アプリ層に問題があるかどうかを判断しようとしています。
このようなフィルタを正確に学んだことはありますか?私はこのような "Hello World"フィルタを自己尊重の学習リソースで見たことがありません。フィルターはHTTPエンドポイントではありません。あなたのフィルタは、基本的に、目的のHTTPエンドポイント(例えば、サーブレットインスタンス、JSPファイル、HTMLファイルなど)へのリクエストを続行するために命令を待っています。代わりにHTTPサーブレットを使用してください。ところで、サーブレットとフィルタのどちらも、Springとは何の関係もありません。 Java EE以上のSpringを好むなら、HTTPサーブレットの代わりにSpringコントローラを使うだけです。 – BalusC
私は全く同じプロキシフィルタを作成し、同じFirefoxプロキシ設定で実行しましたが、example.comに行ったときにFirefox、ChromeまたはSafariで表示されるエラーは発生しません。私は、Spring CLIアプリケーションを使用して、GroovyフィルタをSpring Bootアプリケーションの唯一の@Componentとしてテストしています。アプリサーバーには何を使用していますか?それがコンソールに印刷されていないという事実は、問題がおそらくアプリケーションコードにないことを私に伝えます。 –