ktkt11122334
@ktkt11122334

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SpringのRestControllerへのマッピングミスでTomcatのバージョン情報がクライアントに返却されてしまう

Q&A

Closed

初めまして
表題の内容につきまして質問させていただきたく投稿しました。
早速ですが、表題の内容につきまして

SpringでRestControllerを作成し、
URLエンコード済みのパスパラメータを含むURLを
クライアントからリクエストする際

URLエンコードがSpring側で認識できないケースなどの
リクエスト情報をクライアントからリクエストすると
使用しているTomcatのバージョン情報をSpringがデフォルトで
クライアントに返却してしまいます。

対策方法等ご存知の方、ご教授いただけないでしょうか?

* 試した対策
 ・ExceptionHandlerでBadRequestを返却するハンドラを全てオーバーライド
 ・Errorハンドル用のRestControllerを作成(implements ErrorController.class)

 
 

e.g )

サンプルコード

  @RequestMapping( value = "address/{prefecture}", method = RequestMethod.GET)
  public ResponseEntity<Object> getPostInfoByPrefecture(
      @PathVariable @NotNull String prefecture
    ) {
       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  }

 
リクエスト
 

curl  -G -i http://localhost:8080/address/%

レスポンス

<!doctype html>

  <html lang="en">
    <head>
      <title>HTTP Status 400 – Bad Request</title>
      <style type="text/css">
        body {font-family:Tahoma,Arial,sans-serif;} 
        h1, h2, h3, b {color:white;background-color:#525D76;} 
        h1 {font-size:22px;} 
        h2 {font-size:16px;} 
        h3 {font-size:14px;} 
        p {font-size:12px;} 
        a {color:black;} 
       .line {height:1px;background-color:#525D76;border:none;}
     </style>
   </head>

   <body>
     <h1>HTTP Status 400 – Bad Request</h1>
     <hr class="line" />
       <p><b>Type</b> Status Report</p>
       <p><b>Message</b> Invalid URI: End of file (EOF)</p>
       <p><b>Description</b> The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).</p>
     <hr class="line" />
     <h3>Apache Tomcat/9.0.37</h3>
   </body>

</html>

問題の箇所
Apache Tomcat/9.0.37

0

1Answer

Tomcatの設定をいじるのであれば、大体はXMLに設定を書くになるかと思います。
パッと試す環境がないため答えの提示が出来なくて恐縮ですが、「tomcat version 非表示」で検索すると設定周りが出てくるため、検索して試してみてください。

0Like

Comments

  1. @ktkt11122334

    Questioner

    ご回答いただきありがとうございます。

    SpringBootを使用していますが、
    組み込みのTomcatですので
    xmlの設定は出来そうにありませんでした。

    また、バージョン情報を直接マスクするような設定方法も見つからず、
    レスポンス情報にエラーテキストを返すよう強制するようにすれば
    出来るかもというような感じでした。

    https://www.codota.com/code/java/classes/org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory

    もう少し調査してみます。
  2. Spring Bootなの失念していました。それなら組み込みTomcatなので、やり方変わりますね。
    とりあえずVersion消すにはErrorReportValveクラスにて設定を行えばOKです。
    spring-boot-autoconfigureで出来るはずと思ったのですが、上手くいかなかったので自力でクラスを作成しました。
    こちらで試してみてください。
    まだ質問フィードの使い方がよくわかってなくてソースになってないぽいですが、ご了承ください。
    やり方わかったら、あとで編集しておきます・・・

    ```

    package com.example.demo2.config;

    import org.apache.catalina.valves.ErrorReportValve;
    import org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory;
    import org.springframework.boot.web.server.WebServerFactoryCustomizer;
    import org.springframework.stereotype.Component;

    @Component
    public class PortCustomizer implements WebServerFactoryCustomizer<ConfigurableTomcatWebServerFactory> {

    @Override
    public void customize(ConfigurableTomcatWebServerFactory factory) {
    factory.addContextCustomizers((context) -> {
    ErrorReportValve valve = new ErrorReportValve();
    valve.setShowServerInfo(false);
    valve.setShowReport(false);
    context.getParent().getPipeline().addValve(valve);
    });
    }
    }

    ```


    ```

    HTTP/1.1 400
    Content-Type: text/html;charset=utf-8
    Content-Language: en
    Content-Length: 435
    Date: Sat, 19 Sep 2020 15:43:04 GMT
    Connection: close

    <!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1></body></html>

    ```
  3. @ktkt11122334

    Questioner

    再度、ご回答いただきありがとうございます。
    SpringBootの記載を忘れていました。

    また、記載いただいた内容にて正常動作しました。
    わざわざありがとうざいました。

    それでは、失礼します。

Your answer might help someone💌