Autenticação usando URI userinfo http componente: // userinfo @ hostname: port / path em um servlet

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Eu preciso identificar os utilizadores de acordo com um subconjunto URI. Ele tem o seguinte padrão http: // userinfo @ hostname:. Port / path

O java.net.URI ( http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html ) aplicação representa o URI. No entanto, no servlet eu não era capaz de recuperar a URL / URI que contém o "userinfo" componente da URI. Eu pensei que o método HttpServletRequest.getRequestURL () deve retornar uma URL completa, mas em algum momento o "userinfo" componente está sendo suprimida ou ignorado.

Eu percebi que ao solicitar o servlet usando curl em vez de Firefox, que adiciona um http autorização básica para o cabeçalho. Assim, poderia estar relacionada com a implementação do cliente HTTP? O solicitante pode suprimir o componente "user-info"?

O código a seguir apenas itera através de cabeçalho e tentar ler user-info componente.

@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();
    }

}

Agradecemos antecipadamente!

Foi útil?

Solução

O nome de usuário e senha são passados ??como parte de HTTP autenticação, não faz parte da URL. Em particular, o navegador nunca vai enviá-lo a menos que seja solicitado a via a resposta 401 não autorizado.

Você pode ver alguns exemplos de como implementar a autenticação HTTP em um servlet aqui: http://docstore.mik.ua/orelly/java-ent/servlet/ch08_01.htm

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top