从前端应用程序查询 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 并显示没有基本身份验证弹出窗口的自定义登录屏幕。
我有两个应用程序,两个战争,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 并显示没有基本身份验证弹出窗口的自定义登录屏幕。