java - Get full URL and query string in Servlet for both HTTP and HTTPS requests -
i writing code task retrieve requested url or full path. i've written code:
httpservletrequest request;//obtained other functions string uri = request.getrequesturi(); if (request.getquerystring() != null) uri += "?" + request.getquerystring();
so, when browse http://google.com?q=abc
ok (correct). there problem when browse https://google.com
. value of uri
http://google.com:443google.com:443
, program doesn't when https
used.
and output same request.getrequesturl().tostring()
.
what solution?
by design, getrequesturl()
gives full url, missing query string.
in httpservletrequest
, can individual parts of uri using methods below:
// example: http://myhost:8080/people?lastname=fox&age=30 string uri = request.getscheme() + "://" + // "http" + ":// request.getservername() + // "myhost" ":" + // ":" request.getserverport() + // "8080" request.getrequesturi() + // "/people" "?" + // "?" request.getquerystring(); // "lastname=fox&age=30"
.getscheme()
give"https"
ifhttps://domain
request..getservername()
givesdomain
onhttp(s)://domain
..getserverport()
give port.
use snippet below:
string uri = request.getscheme() + "://" + request.getservername() + ("http".equals(request.getscheme()) && request.getserverport() == 80 || "https".equals(request.getscheme()) && request.getserverport() == 443 ? "" : ":" + request.getserverport() ) + request.getrequesturi() + (request.getquerystring() != null ? "?" + request.getquerystring() : "");
this snippet above full uri, hiding port if default 1 used, , not adding "?"
, query string if latter not provided.
proxied requests
note, if request passes through proxy, need @ x-forwarded-proto
header since scheme might altered:
request.getheader("x-forwarded-proto")
also, common header x-forwarded-for
, show original request ip instead of proxys ip.
request.getheader("x-forwarded-for")
if responsible configuration of proxy/load balancer yourself, need ensure these headers set upon forwarding.
Comments
Post a Comment