أثناء عملية تطوير التطبيقات ، إذا كانت هناك تطبيقات متعددة ، فعادة ما يتم دمجها من خلال بوابة بوابة. هذه البوابة هي مدخل جميع التطبيقات. بمجرد قيام المستخدم بتسجيل الدخول إلى البوابة ويدخل نظامًا آخر ، يحتاج هو أو هي إلى علامة واحدة مماثلة (SSO). عند إدخال كل نظام فرعي ، لا يحتاج هو أو هي إلى تسجيل الدخول مرة أخرى. بالطبع ، يمكنك تنفيذ وظائف مماثلة من خلال برامج تسجيل الدخول الفردية المهنية ، أو يمكنك كتابة رموز قاعدة البيانات بنفسك ، وما إلى ذلك. في الواقع ، هناك طريقة أخرى بسيطة نسبيًا ، وهي تتمثل في تغليف رسائل المستخدم المسجلة من خلال البوابة ، وكتابتها إلى رأس HTTP ، ثم إعادة توجيه الطلب إلى كل نظام فرعي يحصل على اسم مستخدم من HTTP.
تم تلخيص عدة طرق للتعامل مع رأس HTTP:
الاستفادة من httpservletrequest
استيراد javax.servlet.http.httpservletrequest ؛ // ... طلب httpservletrequest الخاص ؛ // الحصول على رؤوس الطلبات الخاصة خريطة خاصة <string ، string> getheadersinfo () {map <string ، string> map = new HashMap <string ، string> () ؛ أسماء الرأس التعداد = request.getheaderNames () ؛ بينما (headernames.hasmoreElements ()) {string key = (string) headernames.nextElement () ؛ قيمة السلسلة = request.getheader (مفتاح) ؛ map.put (المفتاح ، القيمة) ؛ } خريطة الإرجاع ؛ }مثال نموذجي هو كما يلي:
"الرؤوس": {"Host": "yihaomen.com" ، "قبول الترميز": "gzip ، deflate" ، "x-forwarded for": "66.249.xx" ، "x-forward-proto/2.1 ؛ +http: //www.google.com/bot.html) "،" x-request-start ":" 1389158003923 "،" قبول ":"*/*"،" الاتصال ":" Close "،" X-Forwarded-Port ":" 80 "،" من ":" Googlebot (at)}احصل على وكيل المستخدم
استيراد javax.servlet.http.httpservletrequest ؛ // ... طلب httpservletrequest الخاص ؛ سلسلة خاصة getUserAgent () {return request.getheader ("user-Agent") ؛ }مثال نموذجي هو كما يلي:
Mozilla/5.0 (متوافق ؛ Googlebot/2.1 ؛ +http: //www.google.com/bot.html)
مثال على استخدام Spring MVC للحصول على رأس httprequest
استيراد java.util.enumeration ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ استيراد javax.servlet.http.httpservletrequest org.springframework.web.bind.annotation.pathvariable ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ استيراد org.springframework.web.servlet.modelandview ؛@controller@requestMapping ("/site") class sitecontroller {autowired private httpservletrequest request ؛ requestmapping (value = "/{{in}}" ، method = requestMethod.get) modelandview getDomain (pathvariable ("input") input) ModelView.AdDObject ("user-Agent" ، getUserAgent ()) ؛ ModelView.AddObject ("Headers" ، Getheadersinfo ()) ؛ إرجاع ModelView ؛ } // احصل على سلسلة مستخدم خاصة getUserAgent () {return request.getheader ("user-agent") ؛ } // الحصول على رؤوس الطلبات الخاصة خريطة خاصة <string ، string> getheadersinfo () {map <string ، string> map = new hashmap <string ، string> () ؛ أسماء الرأس التعداد = request.getheaderNames () ؛ بينما (headernames.hasmoreElements ()) {string key = (string) headernames.nextElement () ؛ قيمة السلسلة = request.getheader (مفتاح) ؛ map.put (المفتاح ، القيمة) ؛ } خريطة الإرجاع ؛ }}قد يقول بعض الأشخاص أنه يمكن محاكاة رأس HTTP ، بحيث يمكنك بناء نظام لخداعها. نعم ، هذا صحيح. لذلك عند استخدام رأس HTTP لتمريره يستحق كل هذا العناء ، يجب أن تتذكر أنه يجب معالجة جميع الطلبات من خلال البوابة وإعادة توجيهها إلى كل نظام فرعي ، ولن تحدث هذه المشكلة. لأن البوابة تعترض أولاً جميع الطلبات التي بدأها المستخدم. إذا كان مستخدمًا تم إنشاؤه ، فلا يوجد سجل في جلسة البوابة وسيظل يقفز إلى صفحة تسجيل الدخول. إذا تم تسجيله في جلسة البروتال ، وهناك أيضًا سجلات في رأس HTTP ، فهو مستخدم قانوني في النظام الفرعي ، ثم يمكنك التعامل مع منطق العمل وفقًا لبعض المتطلبات.
يحصل JSP/Java على معلومات رأس HTTP (طلب) مثال
<٪ // header.jspout.println ("البروتوكول:" + request.getProtocol () + "<br>") ؛ out.println ("المخطط:" + request.getScheme () + "<br>") ؛ Out.println ("اسم الخادم:" + request.getsername () + "<br>") ؛ request.getServerPort () + "<br>") ؛ out.println ("protocol:" + request.getProtocol () + "<br>") ؛ Out.println ("info server: request.getRemoteaddr () + "<br>") ؛ Out.println ("المضيف البعيد:" + request.getRemoteHost () + "<br>") ؛ out.println ("حرف تشفير:" + request.getCharCterEncoding () + "<br>") ؛ "<br>") ؛ out.println ("نوع المحتوى:" + request.getContentType () + "<br>") ؛ out.println ("نوع المصادقة:" + request.getauthtype () + "<br>") ؛ out.println ("method http: request.getPathInfo () + "<br>") ؛ Out.println ("المسار trans:" + request.getPathTransLated () + "<br>") ؛ Out.println ("Query String:" + request.getquerystring () + "<br>") ؛ Out.println ("user user: + request.get.getRemoR () + + +" <br> ") ؛ "<br>") ؛ out.println ("معرف الجلسة:" + request.getRequestessessionId () + "<br>") ؛ out.println ("طلب url:" + request.getRequesturl () + "<br>") ؛ out.println ("طلب uri: request.getServletPath () + "<br>") ؛ out.println ("تم إنشاؤه:" + session.getCreationTime () + "<br>") ؛ out.println ("lastAccated:" + sessage.getLastAccatedTime () + "<br>") ؛ out.println ( "<br>") ؛ out.println ("قبول:" + request.getheader ("قبول") + "<br>") ؛ out.println ("المضيف: request.getheader ("قبول اللغة") + "<br>") ؛ out.println ("قبول الترميز:" + request.getheader ("قبول") + "<br>") ؛ out.println ("user-user: request.getheader ("connection") + "<br>") ؛ out.println ("ملف تعريف الارتباط:" + request.getheader ("cookie") + "<br>") ؛ ٪>ملاحظات حول request.getheader ("المرجع")
request.getheader ("المرجع") يحصل على عنوان الزائر. فقط عند الوصول إلى الصفحة الحالية من خلال رابط ، يمكنك الحصول على عنوان الصفحة السابقة ؛ بخلاف ذلك ، فإن قيمة request.getheader ("المرجع") لاغية ، ويتم فتح الصفحة الحالية من خلال window.open أو إدخال العنوان بشكل مباشر أيضًا.
ما سبق هو المحتوى الكامل للعديد من الطرق (يجب القراءة) للحصول على رأس HTTPrequest من Java الذي قدمه لك المحرر. آمل أن يكون ذلك مفيدًا لك ودعم wulin.com أكثر ~