java - 从前端应用程序查询其余后端应用程序时避免基本身份验证弹出窗口

标签 java reactjs ajax glassfish basic-authentication

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

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

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

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

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

我尝试过使用基于表单的登录和这种工作方式,但后来我失去了使用像 postman 这样的应用程序来测试我的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 并显示自定义登录屏幕,而无需弹出基本身份验证窗口。

关于java - 从前端应用程序查询其余后端应用程序时避免基本身份验证弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61761555/

相关文章:

java - 如何将 $concat 与 $cond 与 MongoDB Java 驱动程序一起使用

javascript - 在 redux 中使用生命周期方法与在 render 方法中检查 prop 状态

javascript - 如何将函数传递给 react 中的另一个组件

javascript - Ajax/PHP - 无法识别自动完成值

javascript - 如何在 Vanilla JS 中发送 AJAX post 请求并接收回 JSON 数据?

javascript - 数据表 jquery - 未捕获类型错误 : CAnnot read property 'show' of undefined

java - 如何从 JParsec 中的排序解析器中提取所有值?

Java,使方法静态

java - Java 中可配置的枚举

javascript - componentDidMount 和 XMLHttpRequest 加载数据两次但 JSON 无效