使用URI userinfo组件进行身份验证http:// userinfo @ hostname:servlet中的port / path

时间:2009-05-06 04:53:51

标签: java uri

我需要根据URI子集识别用户。它具有以下模式http://userinfo@hostname:port/path

java.net.URI(http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html)实现表示URI。但是,在servlet中,我无法检索包含“userinfo”URI组件的URL / URI。我认为方法HttpServletRequest.getRequestURL()将返回一个完整的URL,但在某个阶段,“userinfo”组件被抑制或忽略。

我意识到当使用curl而不是Firefox请求servlet时,它会向标头添加一个http基本授权。那么,它可能与HTTP客户端实现有关吗?调用者可以抑制“用户信息”组件?

以下代码只是遍历标题并尝试读取user-info组件。

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

}

提前致谢!

1 个答案:

答案 0 :(得分:1)

用户名和密码作为HTTP身份验证的一部分传递,而不是URL的一部分。特别是,除非通过401未经授权的响应要求浏览器,否则浏览器将永远不会发送它。

您可以在此处查看有关如何在servlet中实现HTTP身份验证的一些示例:http://docstore.mik.ua/orelly/java-ent/servlet/ch08_01.htm