Java プロジェクトで埋め込まれた桟橋を使用しています。何らかの理由で、resourceHandler に送信するパスは c:\ (小文字) であり、C:\ (大文字) にエイリアスされています。このため、私の静的コンテンツは提供されていません。
jetty が絶対パスと標準パスを比較してエイリアスを検出することを示すいくつかのドキュメントを読みました。ログに次のように表示されます。
[qtp15485575-19] INFO org.eclipse.jetty.server.handler.ResourceHandler - file:/c:/filepath の別名 file:/C:/filepath
誰でも解決方法について何か考えがありますか?
更新: このために Eclipse に記録されたバグ: https://bugs.eclipse.org/bugs/show_bug.cgi?id=471526
彼らの反応は次のとおりです。
明示的に許可されていない限り、すべての URI が拒否されると仕様に記載されていた場合、エイリアスをチェックする必要はありません。ただし、代わりに、明示的に拒否されたものを除くすべての URI を許可するモデルがあります。
したがって、セキュリティ上の制約が /secretfile.txt に設定されている場合、そのファイルのエイリアスも制約されていることを確認する必要があります...そして FS に依存しない方法でそれを行います。つまり、さまざまなオペレーティング システムでブロックする必要がある場合があります。
/sEcRetFile.TXT
/secretfile.txt
/SECRE~01.TXT
/secretfile.txt@@0
等等等
念のため、エイリアス システムを実装しました。
通常、c: と C: で問題が発生することはありません。これは、コンテキストを構成するときに正規化する必要があるため、正しいものを使用する必要があるためです。しかし、ファイルシステムはリリースごとに動作が変わるため、非常に煩わしい場合があります。
これは、Path クラスを使用してパスの一部をより適切に調べることができる jetty 9.3 で、いくらかうまく処理されていると思います。」
したがって、可能であれば Jetty 9 を使用し、それでも問題が解決しない場合は Joakin の修正を使用するのがおそらく最善の策です。