首页 > 解决方案 > 从前端应用程序查询 rest-backend 应用程序时避免基本身份验证弹出窗口

问题描述

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

我想使用基本身份验证来保护后端,但是这样做时,前端 ajax 请求会在浏览器中触发基本身份验证弹出窗口。

我使用 Glassfish 作为应用服务器。

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

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

我曾尝试使用基于表单的登录并且这种方法有效,但后来我失去了使用邮递员之类的应用程序来测试我的 rest-api 的能力(至少我认为是这种情况,因为我无法在请求本身中进行身份验证)

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

标签: javareactjsajaxglassfishbasic-authentication

解决方案


这个奇妙的人解决了它:如何在发送前更改响应

他所做的是将这个添加到 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 并显示自定义登录屏幕,而无需基本身份验证弹出窗口。


推荐阅读