【问题标题】:Avoid basic auth popup when querying rest-backend application from frontend application从前端应用程序查询 rest-backend 应用程序时避免基本身份验证弹出窗口
【发布时间】:2020-05-13 14:21:19
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 我认为身份验证表单适用于人类将在身份验证过程中提供凭据的 Web 应用程序,在这种情况下,Web 服务旨在在应用程序之间进行交互,所以我不是确保在这种情况下使用身份验证来保护后端是正确的方法。可能以下内容会有所帮助:docs.oracle.com/cd/E24329_01/web.1211/e24983/…

标签: java reactjs ajax glassfish basic-authentication


【解决方案1】:

这个奇妙的人解决了它: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 并显示自定义登录屏幕,而无需基本身份验证弹出窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2023-01-05
    • 2015-07-20
    • 2016-07-30
    • 2014-01-26
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多