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" if https://domain request.
  • .getservername() gives domain on http(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

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -