SpringMvc適応ポストとnginxのリバースプロキシを追加するための要求を取得

比較的なしプロジェクトのドキュメントピットインされたプロジェクトを通じて、組み込みやモバイルバンキングサービス、データ交換仕様は石に触れていませんがあります。だから、大規模なバグの発見後の生産は、IOSが要求されたデータを受信できないです!(私はテスト・プロセスに参加しなかった、テストプロセスは、IOS試験の疑わなくてもよいです)

CCB本社モバイルバンキングと接触した後、モバイルバンキングが原因開発フレームワークの制約のため、IOSは、要求だけにPOSTリクエストを送ることができることを学んだ、要求は二つのタイプに分けられます。
Android -- GET请求 Ios -- POST请求

13566833-580b5d964c76e705.jpg
シナリオの説明.JPG

だから我々は、コード、私たちの使用のために前記リード・パラメータ各適応要求モードの2種類を更新する必要があります。SpringMVCの開発フレームに、より少ない伝送パラメータいるので、それが唯一の要求を取得すると考える前にして、,,コードの決意にPOSTリクエストを大きくする必要がある、パラメータが非常に滑らかで取ります。

String userinfo = null;
        if (request.getQueryString() != null) {
            String requestStr = request.getRequestURL() + "?" + request.getQueryString();
            log.info("Get请求=====" + requestStr);
            userinfo = request.getParameter("userInfo");
            
            if (userinfo != null && userinfo.length() > 0) {
                userinfo = userinfo.replaceAll(" ", "+");
                log.info("Get请求取到的userInfo的值为=====" + userinfo);
            } else {
                log.error("userInfo的值为null");
            }
            
        } else {
            StringBuffer sb = new StringBuffer();
            InputStream is;
            String requestStr = null;
            BufferedReader br = null;
            try {
                is = request.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                br = new BufferedReader(isr);
                String s = "";
                while ((s = br.readLine()) != null) {
                    sb.append(s);
                }
                requestStr = sb.toString();
                
                log.info("Post请求=====" + requestStr);
                
                String[] user = requestStr.split("&");
                
                for (int i = 0; i < user.length; i++) {
                    if(user[i].contains("userInfo")){
                        String[] userStrSub = user[i].split("=");
                        userinfo = userStrSub[1];
                        break;
                    }
                }
                
                if (userinfo != null && userinfo.length() > 0) {
                    userinfo = userinfo.replaceAll("%2B", "+");
                    log.info("Post请求取到的userInfo值为==" + userinfo);
                } else {
                    log.error("userInfo的值为null");
                }
            
            } catch (IOException e1) {
                e1.printStackTrace();   
            } finally {
                try {
                    if (br != null) {
                        br.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

プロジェクトspringMvcフレーム、ポストとは、要求が@RequestMapping、受信取得(値=「」)「/」と全く異なる「/」結果なしでポストマン、ポストマンを送ったPOSTリクエストの結果を使用した場合

郵便配達は、POSTリクエストを送信します。HTTP:// localhostを:8080 / yndist
の読み出し要求によるIOストリーム、結果はNULLです

郵便配達は、POSTリクエストを送信します。HTTP:// localhostを:8080 / yndist /
IOストリームによっては、要求を読んで、結果はJSONに文字列を取ることができます

なぜ追加「/」と「/」なしの結果が違うのでしょうか?使用request.getRequestURI()取るために結果をある/yndist/とき、大径相葉それプリントIOストリームが発生しますなぜ、?

这个有机会研究下,暂时不考虑这个因素。。。

パケットキャプチャツールを使用して、結果は「/」を追加してなくて、「/」持っているデータを、この時点で、プログラムがどこかにバグが登場していることを示すが、これが発生する理由は、一時的に私は見つけられませんでした。

:ヌルを設定する理由を説明するための場所で(値を=「」)@RequestMapping
サーバー、ポート8080をデフォルトのリスニング、提供本社https://zwfw.yn.gov.cn/yndistので、8080 / yndist:サーバーのIP +ポート+ yndistにデフォルトのポイントを、これは次のとおりです。127.0.0.1この点は、WEBサービスで特に同様の経路であるので、この場所はNULLに設定されています。

したがって、これに応じてhttps://zwfw.yn.gov.cn/yndist、ハードコードアクセスURL、私はプロジェクト名も変更されている置くyndistが、POSTリクエストを受信したときに、IOの印刷ストリームは関係なく、プラス「/」があったが、任意の値を取得する郵便配達のテストを使用することで、どのように、ヌルではありません「/」の区別なし。

リバースプロキシ設定を行うにはnginxのを使用するための他の方法を考えてみて特に簡単です:

server {
        listen       8080;
        server_name  127.0.0.1; //如有需要,需更改为自己服务器Ip

        #access_log  logs/host.access.log  main;
        
        location /yndist {
                # 转发请求到后端服务网关
                proxy_pass http://127.0.0.1:7070/yndist/index.do;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js|properties|json)$ {
            proxy_pass http://127.0.0.1:7070;
        }
   }

その後、Tomcatのデフォルトポート7070は、@ @RequestMapping(値= "/変更index.do OKデバッグ")、その後、追加切片を、!

実際には、この場所はnginxのは、Tomcatはリバースプロキシを設定することができませんが、いくつかは試してみました、成功せず、公知の方法があるので、nginxの友人を使用して、偉大な神の指導の下に置くことができます。

ます。https://www.jianshu.com/p/b579f1b44f40で再現

おすすめ

転載: blog.csdn.net/weixin_34415923/article/details/91105268