3

これが私のコントローラーです:

@RequestMapping(method = RequestMethod.GET, value="/test/**", headers="Accept=*/*")
public @ResponseBody ResponseEntity<byte[]> getRequest(HttpServletRequest request) 
{
        System.out.println((String) request.getAttribute( HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE ));
}

GET次のようなリクエストを作成したいときはいつでも:localhost:8080/test/some/request/given/in私のシステムはコンソールに書きます:

some/request/given/in

したいように。問題は、スラッシュの代わりに/記号%2Fまたは%2f. パスリクエストにこれらのシンボルがある場合、コントローラーはまったく処理しません。

これを修正する方法はありますか?

4

3 に答える 3

4

通常、ほとんどのアプリケーション サーバーは、URL に が含まれ%2Fている/かのようには扱いません。%2Fただし、仕様で宣言されているの%2Fは、パス区切り文字を指定できる方法の 1 つであるため、このシナリオを処理するために、Tomcat はシステム レベルのプロパティを提供します。

Tomcat の場合、

org.apache.tomcat.util.buf. UDecoder.ALLOW_ENCODED_SLASH = true

%2Fおよびは、 %5Cパス区切り文字として許可されます。ドキュメントを参照してください。これはJAVA_OPTS、次のように tomcat バッチ ファイルで設定できます。

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%   -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

これはTomcat 専用です。他のアプリケーションサーバーにも同様の配置があると確信しています。

于 2013-08-08T11:08:36.087 に答える
1

URL エンコーダーとデコーダーを使用して、 や などの特殊文字を含むパス パラメータを送信する必要があり/ます-。サーバー側のコードでは、次のようにするだけです。

String result = URLDecoder.decode(url, "UTF-8");

次に、パラメータをフェッチします。

于 2013-08-08T09:11:15.233 に答える
0

発生している問題は、 RFC 2616のセクション 3.2.1 で定義されているように、エンコードされたスラッシュ文字%2fが HTTP URL の一部に配置されていることです。RFC 2396で定義されているの文法は、セマンティック文字「スラッシュ」ではなく、US-ASCII 文字に関して明確に定義されています。何らかの理由でエスケープされたスラッシュ文字を使用できるようにしたい場合は、一部を含む URL を使用する必要があります (例: )。abs_pathabs_path'/'query/test/?some%2frequest

于 2013-08-08T09:38:42.453 に答える