Autenticazione tramite il componente URI userinfo http: // userinfo @ nomehost: porta / percorso in un servlet

StackOverflow https://stackoverflow.com/questions/828076

  •  06-07-2019
  •  | 
  •  

Domanda

Devo identificare gli utenti in base a un sottoinsieme URI. Ha il seguente schema http: // userinfo @ nomehost: porta / percorso .

The java.net.URI ( La realizzazione di http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html ) rappresenta l'URI. Tuttavia, nel servlet non sono stato in grado di recuperare l'URL / URI contenente "userinfo" Componente dell'URI. Ho pensato che il metodo HttpServletRequest.getRequestURL () avrebbe restituito un URL completo, ma a un certo punto il " userinfo " il componente viene soppresso o ignorato.

Mi sono reso conto che quando si richiedeva il servlet usando curl invece di Firefox, si aggiungeva un'autorizzazione di base http all'intestazione. Quindi, potrebbe essere correlato all'implementazione del client HTTP? Il chiamante può sopprimere " informazioni utente " componente?

Il seguente codice scorre semplicemente attraverso l'intestazione e prova a leggere il componente informazioni utente.

@SuppressWarnings("unchecked")
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 
    try {

        PrintWriter out = response.getWriter();

        String header;
        for (Enumeration e = request.getHeaderNames(); e.hasMoreElements();) {
             header = e.nextElement().toString();
             out.println(header + ": " + request.getHeader(header));
        }

        URI uri = new URI(request.getRequestURL().toString());

        out.println("request uri: " + request.getRequestURI());
        out.println("request url: " + request.getRequestURL());
        out.println("userinfo: " + uri.getUserInfo());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }

}

Grazie in anticipo!

È stato utile?

Soluzione

Il nome utente e la password vengono passati come parte dell'autenticazione HTTP, non parte dell'URL. In particolare, il browser non lo invierà mai a meno che non venga richiesto tramite la risposta 401 non autorizzata.

Puoi vedere alcuni esempi su come implementare l'autenticazione HTTP in un servlet qui: http://docstore.mik.ua/orelly/java-ent/servlet/ch08_01.htm

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top