从前端应用程序查询 rest-backend 应用程序时避免基本身份验证弹出窗口

Avoid basic auth popup when querying rest-backend application from frontend application

我有两个应用程序,两个战争,app-rest 和 app-web。 App-rest 是持有 rest-api 的后端,app-web 是持有 React GUI 的前端。

我想使用基本身份验证保护后端,但是在执行此操作时,前端 ajax 请求会在浏览器中触发基本身份验证弹出窗口。

我正在使用 Glassfish 作为应用程序服务器。

我已尝试保护这两个应用程序,希望它们共享 session cookie,但情况似乎并非如此。

还尝试了 java 过滤器以在未经授权时尝试删除 WWW-authenticate header 因为我已经读到 header 是触发弹出窗口的那个,但是过滤器是在基本身份验证初始化期间未激活。

我尝试过使用 form-based 登录,但后来我失去了使用像邮递员这样的应用程序来测试我的 rest-api 的能力(至少我认为是这种情况,因为我无法在请求本身中进行身份验证)

如何避免在从前端向后端发出请求时显示基本身份验证弹出窗口?

这个了不起的人解决了它:How to change response before send

他所做的是将此添加到 web.xml

<error-page>
   <error-code>401</error-code>
   <location>/error.jsp</location>
</error-page>

在error.jsp中:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title></title>
        </head>
        <body>
            <%
            int status = response.getStatus();
            if (status == 401) {
                response.setStatus(403);
            }
            %>
        </body>
    </html>

然后在您的 javascript 中,您可以只查找状态代码 403 并显示没有基本身份验证弹出窗口的自定义登录屏幕。