【发布时间】:2023-03-22 09:41:02
【问题描述】:
我创建了一个BasicAuthFilter,它有这个签名:
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException
如果有人以正确的方式调用带有 Authorization 标头的过滤器,这将起作用。但是,如果有人使用 chrome 或 firefox 访问这样的 url:
http://username:password@localhost:8888
浏览器没有使用该信息填充 Authorization 标头(这让我感到惊讶)。我查看了 chrome 发送的信息,用户名和密码在请求 URL 中,但没有其他地方。
我不知道如何从 URL 中提取该信息。我在HttpServletRequest 上尝试了很多吸气剂,但没有找到任何可以给我用户名和密码的东西。
注意:是的,我知道这是不安全的,当您尝试测试系统时使用它真的很方便。
【问题讨论】:
-
您可以手动解析 URL 字符串...
-
如果你这样做会发生什么 String url = request.getRequestURI();然后手动解析?
-
@JanVladimirMostert 它包含我的主机之后的路径。
-
@MonadNewb 我很乐意这样做,但我不确定如何获取完整的 URL。我已经对此事进行了一些研究,但每当我尝试时,网址中都没有用户名/密码。
-
@MonadNewb 过滤器正在接收来自浏览器的请求。我没有
URL对象,我有ServletRequest。我在问如何从该签名中的参数中获取用户名和密码。
标签: servlets basic-authentication servlet-filters