ในระหว่างกระบวนการพัฒนาแอปพลิเคชันหากมีหลายแอปพลิเคชันพวกเขามักจะรวมเข้าด้วยกันผ่านพอร์ทัลพอร์ทัล พอร์ทัลนี้เป็นทางเข้าสู่แอปพลิเคชันทั้งหมด เมื่อผู้ใช้เข้าสู่ระบบพอร์ทัลและเข้าสู่ระบบอื่นเขาหรือเธอต้องการการลงชื่อเข้าใช้เดียวที่คล้ายกัน (SSO) เมื่อเข้าสู่ระบบย่อยแต่ละระบบเขาหรือเธอไม่จำเป็นต้องเข้าสู่ระบบอีกครั้ง แน่นอนว่าคุณสามารถใช้ฟังก์ชั่นที่คล้ายกันผ่านซอฟต์แวร์ลงชื่อเข้าใช้เดี่ยวระดับมืออาชีพหรือคุณสามารถเขียนโทเค็นฐานข้อมูลด้วยตัวเอง ฯลฯ ในความเป็นจริงมีวิธีการที่ค่อนข้างง่ายอีกวิธีหนึ่งซึ่งก็คือการห่อหุ้มข้อความของผู้ใช้ที่เข้าสู่ระบบผ่านพอร์ทัลเขียนไปยังส่วนหัวของ HTTP
มีการสรุปวิธีการหลายวิธีในการจัดการกับส่วนหัว HTTP:
ใช้ httpservletrequest
นำเข้า Javax.servlet.http.httpservletRequest; // ... คำขอ httpservletrequest ส่วนตัว; // รับส่วนหัวคำขอแผนที่ส่วนตัว <สตริง, สตริง> getheadersInfo () {แผนที่ <สตริง, สตริง> แผนที่ = ใหม่ hashmap <สตริง, สตริง> (); การแจงนับชื่อ headername = request.getheaderNames (); ในขณะที่ (headernames.hasmoreElements ()) {string key = (string) headerNames.nextElement (); ค่าสตริง = request.getheader (คีย์); map.put (คีย์, ค่า); } กลับแผนที่; -ตัวอย่างทั่วไปมีดังนี้:
"ส่วนหัว": {"โฮสต์": "yihaomen.com", "ยอมรับการเข้ารหัส": "gzip, deflate", "x-forwarded-for": "66.249.xx", "x-forwarded-proto": "http", +http: //www.google.com/bot.html) "," x-request-start ":" 1389158003923 "," ยอมรับ ":"*/*"," การเชื่อมต่อ ":" ปิด "," x-forwarded-port ":" 80 "รับตัวแทนผู้ใช้
นำเข้า Javax.servlet.http.httpservletRequest; // ... คำขอ httpservletrequest ส่วนตัว; สตริงส่วนตัว getUseragent () {return request.getheader ("ผู้ใช้ตัวแทน"); -ตัวอย่างทั่วไปมีดังนี้:
mozilla/5.0 (เข้ากันได้; googlebot/2.1; +http: //www.google.com/bot.html)
ตัวอย่างการใช้สปริง MVC เพื่อรับส่วนหัว httprequest
นำเข้า java.util.enumeration; นำเข้า java.util.hashmap; นำเข้า java.util.map; นำเข้า javax.servlet.http.httpservletrequest นำเข้า org.springframework.beans.factory.annotation.autowired; 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") คลาสสาธารณะ sitecontroller {@autowired ส่วนตัว httpservletrequest คำขอ; @RequestMapping (value = "/{input:.+}", method = requestMethod.get) โมเดลสาธารณะและวิวทิวทัศน์ getDomain (@PathVariable ("อินพุต") อินพุตสตริง) {ModelAndView ModelView = NEW MODELANDVIEW ("ผลลัพธ์"); modelview.addobject ("ผู้ใช้ตัวแทน", getUseragent ()); modelview.addobject ("ส่วนหัว", getheadersinfo ()); ส่งคืน ModelView; } // รับตัวแทนผู้ใช้สตริงส่วนตัว getUserAgent () {return request.getheader ("ผู้ใช้ตัวแทน"); } // รับส่วนหัวคำขอส่วนบุคคลส่วนตัว <สตริง, สตริง> getheadersInfo () {แผนที่ <สตริง, สตริง> แผนที่ = ใหม่ hashmap <สตริง, สตริง> (); การแจงนับชื่อ headername = 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.getServerport () + "<br>"); out.println ("โปรโตคอล:" + request.getProtocol () + "<br>"); out.println ("ข้อมูลเซิร์ฟเวอร์:" + getServletConfig (). getServletContext () request.getRemoteaddr () + "<br>"); out.println ("โฮสต์ระยะไกล:" + request.getRemoteHost () + "<br>"); out.println ("การเข้ารหัสอักขระ:" คำขอ. get.getCharacterencoding () + "<br>"); "<br>"); out.println ("ประเภทเนื้อหา:" + request.getContentType () + "<br>"); out.println ("ประเภท Auth:" + request.getauthtype () + "<br>") request.getPathInfo () + "<br>"); out.println ("เส้นทางทรานส์:" + request.getPathTranslated () + "<br>"); out.println ("string คำถาม:" request.getQueryString () + "<br>"); "<br>"); out.println ("รหัสเซสชัน:" + request.getRequestedSessionId () + "<br>"); out.println ("ขอ URL:" + Request.getRequesturl () + "<br>"); request.getServletPath () + "<br>"); out.println ("สร้างขึ้น:" + session.getCreationTime () + "<br>"); out.println ("LastAccessed:" + session.getLastaccessiontime () + "<br>"); "<br>"); out.println ("ยอมรับ:" + request.getheader ("ยอมรับ") + "<br>"); out.println ("โฮสต์:" + request.getheader ("โฮสต์") + "<br>"); request.getheader ("ยอมรับภาษา") + "<br>"); out.println ("ยอมรับการเข้ารหัส:" + Request.getheader ("Accept-encoding") + "<br>"); out.println ("ผู้ใช้-" request.getheader ("การเชื่อมต่อ") + "<br>"); out.println ("คุกกี้:" + request.getheader ("คุกกี้") + "<br>");%>หมายเหตุเกี่ยวกับ request.getheader ("ผู้อ้างอิง")
request.getheader ("ผู้อ้างอิง") ได้รับที่อยู่ของผู้เข้าชม เฉพาะเมื่อเข้าถึงหน้าปัจจุบันผ่าน ลิงก์ คุณสามารถรับที่อยู่ของหน้าก่อนหน้าได้ มิฉะนั้นค่าของ request.getheader ("ผู้อ้างอิง") เป็นโมฆะและหน้าปัจจุบันจะเปิดผ่าน window.open หรือป้อนที่อยู่โดยตรงก็เป็นโมฆะ
ข้างต้นเป็นเนื้อหาเต็มรูปแบบของหลายวิธี (ต้องอ่าน) เพื่อรับส่วนหัว HTTPREQUEST จาก Java ที่นำเสนอโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณและสนับสนุน wulin.com เพิ่มเติม ~