2012-05-08 3 views
1

공개 도메인에서 실행중인 하나의 서블릿에서 request.getRequestURL() 메소드에서 비정상적인 문자열 로그가 발생했습니다. 나는 세부 사항을 로깅하고 "http://answers.yahoo.com"인 항목을 찾았습니다. 이 일이 어떻게 일어날 수 있었는지 분석하는 데 도움이 될 수 있습니까? 이상적으로 로그는 사용자 또는 장치가 서블릿을 호출하는 데 사용하는 브라우저의 URL 주소 여야합니다. 예를 들어자바 서블릿 request.getRequestURL()에 비정상적인 문자열이 기록됨

는 IP에 매핑 서버의 등록 된 이름 http://www.alphabeta.com/x_serv?a=2 경우, 로그가 alphabeta.com을해야

답변

0
정확히 기록 할 무엇

?

호스트 이름 만 필요한 경우 인터페이스 javax.servlet.ServletRequestgetServerName() 인터페이스를 사용하십시오. 요청이 전송 된 서버의 호스트 이름을 리턴합니다.

getServerName()과 함께 사용하고 getServletPath() 메서드를 사용하면 서블릿의 매개 변수없이 URL을 가져오고 싶을 수 있습니다. 메서드 getServletPath()에서 인터페이스 javax.servlet.http.HttpServletRequest은 서블릿을 호출하지만 추가 경로 정보 나 쿼리 문자열을 포함하지 않는 요청 URL의 일부를 반환합니다.

그리고 다음의 코드는 페이지의 절대 URL을 결정합니다 : URL 클래스는 패키지 java.net에서입니다

String uri = request.getRequestURI(); 
if (request.getQueryString() != null) { 
    uri += '?' + request.getQueryString(); 
} 
URL reconstructedUrl = new URL(request.getScheme(), 
          request.getServerName(), 
          request.getServerPort(), 
          uri); 
logger.info("The full URL: " + reconstructedUrl.toString()); 

.

+0

나는 OP가 어떻게 요청 URL이 스푸핑 될 수 있는지 알고 싶어한다고 생각합니다. 여기에서 발생한 것으로 보입니다. –

+0

이 문제에 대한 내 해결책이 마음에 들지 않습니다. – kapand

+0

"정확히 무엇을 원하니?" - 나는 OP가 getRequestURL에서 반환 된 URL을 스푸핑하는 것이 가능한지 알고 싶어한다고 생각했습니다. 나는 단지 도우려고 노력했을 뿐이었다. 내 의견을 무시하십시오. –