httpservletrequestの紹介
httpservletrequestオブジェクトは、クライアントの要求を表します。クライアントがHTTPプロトコルを介してサーバーにアクセスすると、HTTPリクエストヘッダーのすべての情報がこのオブジェクトにカプセル化されます。このオブジェクトが提供する方法により、クライアントが要求するすべての情報を取得できます。
導入
この記事では、主に、httpservletrequestのスプリングMVC直接注入のセキュリティに関する関連コンテンツを紹介します。それは非常に簡単な質問のようですので、Springのソースコード処理を追跡できます
SpringMVCを書き込む必要がある場合、SpringMVCを書き込むこの種のコードが多くあります。
のように:
@controller@requestmapping(value = "/user")public class loanclactionpage extends abstractaction {@requestmapping(value = "/page/active")public string loaanaaccountactivepage(httpservletrequest request){// dosomethingsingsingstring pathinfo = request.getpathinfo();コントロールを書きたいたびに、リクエストをパラメーターとして渡さなければならないようです。これは非常に冗長です。
実際、コントロール内のリクエストオブジェクトを定義し、それを注入してから、いつでも使用できます。
のように:
パブリッククラスの抽象{@autowiredprotected httpservletrequestリクエスト; ... ...次に、コントロールで直接使用します。
@controller@requestmapping(value = "/user")public class loanclactionPage拡張{@requestmapping(value = "/page/active")public string loaanaaccountactivepage(){//要求をdosomethingstring pathinfo = request.getpathinfo(); "active"; }}したがって、問題は、セブレットがマルチスレッドであり、要求するたびにリクエストは実際には新しいオブジェクトです。参照を共有すると、直接スレッドが不安定になりますか?
便利で、問題もここにあります。 Servertは実際にはマルチスレッドです。リクエストの共有にセキュリティの問題はありますか?スプリングコードを分析します
1.注入されたリクエストはどこから来ますか?
注入は実際にwebApplicationContextutilsに行き、RequestObjectFactoryを介して値を取得して追跡することがわかっています
RequestContextholderの値を返します。 RequestContextholderを追跡します
毎回返されるリクエストは、実際には実装クラスServletWebRequest(ServletRequestattributes)のリクエストです。 requestAttributesはthreadlocalに属しているため、注入された要求もスレッドセーフです。
2。リクエストオブジェクトはいつ春までに設定されていますか?
httpservletの実装クラスFrameworkServlet-> service()->processRequst()
各リクエストは最新のリクエストを設定し、値を設定します
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。