如何安全地公开图像以便用户可以直接在 <img src=""> 中使用它

How to expose Images securely so user can use it directly in <img src="">

我们的数据库中有图像。

最终用户希望使用

访问它
<img src="https://mydata.ra.com/Api/image">
  1. 我们通知最终用户调用我们的 API,我们将 return base64 并使用它。 (从后端代码调用或 javascript)
  2. 我们计划将 API return 的 URL 提供给最终用户,URL 包含的信息将在 15 分钟后过期,最终用户可以访问图像来自 URL

这里可以使用什么其他策略来提供对可直接在 IMG Src 中使用的图像的访问?

您可以使用 Servlet。

doGet()方法中,检查安全后(登录状态,oauth,anti-CRSF,无论你通常检查什么),将路径转换为访问数据库中图像的密钥:

例如:如果 Servlet 映射到 /img/fetcher/*,您可以使用

调用它
<img src='{yourcontext}/img/fetcher/{imguuid}">

然后只需从 URI 检索 imguuid,将其转换为您的数据库密钥,执行 select 并在您的 servlet 响应中提供它。

        byte [] image = yourBuLogic.getImage(request.getRequestURI());

        response.setBufferSize(DEFAULT_BUFFER_SIZE);
        response.setContentType("image/png"); // You can store this on the database as well
        response.setHeader("Content-Length", String.valueOf(image.length));
        response.getOutputStream().write(image);
        response.getOutputStream().flush();