質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

0回答

803閲覧

"/hoge/%2e" あるいは "/hoge/." でリクエストした際に404エラーになってしまう

sakata_inu

総合スコア25

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2021/10/11 06:27

Spring Bootで以下のようなRestAPIを作成しています。

java

1... 2 3@RequestMapping(value = "/hoge/{param:.+}") 4public ResponseEntity<?> get(@PathVariable("param") String param) { 5 return ResponseEntity.ok("Hello, world! Param : " + param); 6} 7 8...

このAPIに対し、http://localhost:8080/hoge/. あるいはピリオドをエンコードした http://localhost:8080/hoge/%2e にリクエストしたとき、いずれも404エラーになってしまいます。
ただし、http://localhost:8080/hoge/param. あるいは http://localhost:8080/hoge/param%2e は期待通りに動きます。

おそらく末尾の /. は Spring あるいは tomcat 側で不正なURLとして扱っていると推測していますが、それを裏付ける資料を探し当てる事ができませんでした。
また、エンコードしたピリオドも通常のピリオドと同様に扱われる理由がわかりません。

上記のような末尾にピリオドを使用した場合404エラーになってしまう原因、及びその回避策があればご教授いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/10/11 09:52

Spring 以前に URL そのものの仕様で、パス部分の . や .. は特別扱いされるような…。(要出典)
sakata_inu

2021/10/12 09:52

Spring Security に StrictHttpFirewall#setAllowUrlEncodedPeriod というエンコードされたピリオドを許可すると思われるメソッドが存在します。 今回は Spring Security を導入していないので Spring Boot 側の問題なのかなと推測しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問