我需要根据 URI 子集来识别用户。它具有以下模式http://userinfo@hostname:port/path
。
java.net.URI实现表示 URI 。但是,在 servlet 中,我无法检索到包含“userinfo”URI 组件的 URL/URI。我认为 HttpServletRequest.getRequestURL() 方法会返回一个完整的 URL,但在某个阶段“userinfo”组件被抑制或忽略。
我意识到,当使用 curl 而不是 Firefox 请求 servlet 时,它会在标头中添加一个 http 基本授权。那么,它可能与 HTTP 客户端实现有关吗?调用者可以抑制“用户信息”组件吗?
以下代码只是遍历标头并尝试读取用户信息组件。
@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();
}
}
提前致谢!