java에서 HttpRequest Header를 가져오는 몇 가지 방법

7680 단어 javahttprequest
응용 프로그램을 개발하는 과정에서 여러 개의 응용 프로그램이 있으면 보통 하나의 포털 포털을 통해 통합된다. 이 포털은 모든 응용 프로그램의 입구이다. 사용자가 포털에 로그인한 후에 다른 시스템에 들어가면 유사한 단일 로그인(SSO)이 필요하다.각 서브시스템에 들어갈 때 다시 로그인할 필요가 없다. 물론 유사한 기능은 전문적인 단일 로그인 소프트웨어를 통해 실현할 수도 있고 데이터베이스 token을 직접 작성하는 방식으로 실현할 수도 있다.사실 또 하나의 간단한 방법은 포털을 통해 이미 로그인한 사용자의 메시지를 봉인하여 httpheader에 쓴 다음에 forward를 각 하위 시스템에 요청하고 각 하위 시스템은 httpheader에서 사용자 이름을 가져와 로그인했는지 여부의 검사나 합법적인 검사로 삼는 것이다.
http Header를 처리하는 몇 가지 방법을 요약했습니다.
HttpServletRequest 활용

import javax.servlet.http.HttpServletRequest;
 //...
 private HttpServletRequest request;
 //get request headers
 private Map<String, String> getHeadersInfo() {
  Map<String, String> map = new HashMap<String, String>();
  Enumeration headerNames = request.getHeaderNames();
  while (headerNames.hasMoreElements()) {
    String key = (String) headerNames.nextElement();
    String value = request.getHeader(key);
    map.put(key, value);
  }
  return map;
 }
대표적인 예는 다음과 같습니다.

"headers" : {
  "Host" : "yihaomen.com",
  "Accept-Encoding" : "gzip,deflate",
  "X-Forwarded-For" : "66.249.x.x",
  "X-Forwarded-Proto" : "http",
  "User-Agent" : "Mozilla/5.0 (compatible; Googlebot/2.1; +
http://www.google.com/bot.html
)",
  "X-Request-Start" : "1389158003923",
  "Accept" : "*/*",
  "Connection" : "close",
  "X-Forwarded-Port" : "80",
  "From" : "googlebot(at)googlebot.com"
}
user-agent 가져오기

import javax.servlet.http.HttpServletRequest;
 //...
 private HttpServletRequest request;
 private String getUserAgent() {
  return request.getHeader("user-agent");
 }
대표적인 예는 다음과 같습니다.

Mozilla/5.0 (compatible; Googlebot/2.1; +
http://www.google.com/bot.html
)
spring mvc를 이용하여 HttpRequest Header를 가져오는 예

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/site")
public class SiteController {
  @Autowired
  private HttpServletRequest request;
  @RequestMapping(value = "/{input:.+}", method = RequestMethod.GET)
  public ModelAndView getDomain(@PathVariable("input") String input) {
    ModelAndView modelandView = new ModelAndView("result");
    modelandView.addObject("user-agent", getUserAgent());
    modelandView.addObject("headers", getHeadersInfo());
    return modelandView;
  }
  //get user agent
  private String getUserAgent() {
    return request.getHeader("user-agent");
  }
  //get request headers
  private Map<String, String> getHeadersInfo() {
    Map<String, String> map = new HashMap<String, String>();
    Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
      String key = (String) headerNames.nextElement();
      String value = request.getHeader(key);
      map.put(key, value);
    }
    return map;
  }
}
아마도 누군가는 Http Header가 시뮬레이션을 할 수 있다고 말할 것이다. 그러면 자신은 이런 시스템을 속이는 데 사용할 수 있다. 그렇다. 그렇기 때문에 Http Header로 가치를 전달할 때 모든 요청은 Portal을 통해 처리해야 한다. 그리고forward가 각 서브시스템에 도착하면 이 문제가 발생하지 않을 것이다.Portal은 먼저 사용자가 제기한 모든 요청을 차단합니다. 만약에 구조된 사용자라면 Portal의session도 기록이 없고 로그인 페이지로 넘어갈 것입니다. 만약protal의session에 기록되고 HttpHeader에도 기록이 있다면 서브시스템은 합법적인 사용자입니다. 그리고 자신은 일부 요구에 따라 업무 논리를 처리할 수 있습니다.
JSP/Java HTTP 헤더 정보 가져오기(request) 예

<%
//header.jsp
out.println("Protocol: " + request.getProtocol() + "<br>");
out.println("Scheme: " + request.getScheme() + "<br>");
out.println("Server Name: " + request.getServerName() + "<br>" );
out.println("Server Port: " + request.getServerPort() + "<br>");
out.println("Protocol: " + request.getProtocol() + "<br>");
out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo() + "<br>");
out.println("Remote Addr: " + request.getRemoteAddr() + "<br>");
out.println("Remote Host: " + request.getRemoteHost() + "<br>");
out.println("Character Encoding: " + request.getCharacterEncoding() + "<br>");
out.println("Content Length: " + request.getContentLength() + "<br>");
out.println("Content Type: "+ request.getContentType() + "<br>");
out.println("Auth Type: " + request.getAuthType() + "<br>");
out.println("HTTP Method: " + request.getMethod() + "<br>");
out.println("Path Info: " + request.getPathInfo() + "<br>");
out.println("Path Trans: " + request.getPathTranslated() + "<br>");
out.println("Query String: " + request.getQueryString() + "<br>");
out.println("Remote User: " + request.getRemoteUser() + "<br>");
out.println("Session Id: " + request.getRequestedSessionId() + "<br>");
out.println("Request URL: " + request.getRequestURL() + "<br>");
out.println("Request URI: " + request.getRequestURI() + "<br>");
out.println("Servlet Path: " + request.getServletPath() + "<br>");
out.println("Created : " + session.getCreationTime() + "<br>");
out.println("LastAccessed : " + session.getLastAccessedTime() + "<br>");

out.println("Accept: " + request.getHeader("Accept") + "<br>");
out.println("Host: " + request.getHeader("Host") + "<br>");
out.println("Referer : " + request.getHeader("Referer") + "<br>");
out.println("Accept-Language : " + request.getHeader("Accept-Language") + "<br>");
out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding") + "<br>");
out.println("User-Agent : " + request.getHeader("User-Agent") + "<br>");
out.println("Connection : " + request.getHeader("Connection") + "<br>");
out.println("Cookie : " + request.getHeader("Cookie") + "<br>");
%>
request 정보getHeader("Referer")의 설명
request.getHeader(Referer)에서 방문자 주소를 가져옵니다.링크를 통해 현재 페이지에 접근할 때만 이전 페이지의 주소를 얻을 수 있습니다.그렇지 않으면 요청합니다.getHeader("Referer")의 값은 Windows를 통해 Null입니다.오픈은 현재 페이지를 열거나 주소를 직접 입력하거나 Null입니다.
지금까지 여러분을 위해 가져온 자바가 Http Request Header를 획득하는 몇 가지 방법(본편)의 모든 내용입니다. 여러분에게 도움이 되고 많은 응원 부탁드립니다~

좋은 웹페이지 즐겨찾기