java - 从前端应用程序查询 rest-backend 应用程序时避免基本身份验证弹出窗口
问题描述
我有两个应用程序,两个战争,app-rest 和 app-web。App-rest 是拥有一个 rest-api 的后端,而 app-web 是拥有一个 react GUI 的前端。
我想使用基本身份验证来保护后端,但是这样做时,前端 ajax 请求会在浏览器中触发基本身份验证弹出窗口。
我使用 Glassfish 作为应用服务器。
我已经尝试保护这两个应用程序,希望它们共享会话 cookie,但似乎并非如此。
还尝试了 java 过滤器在未经授权时尝试删除 WWW-authenticate 标头,因为我已经读到该标头是触发弹出窗口的标头,但在基本身份验证初始化期间未激活过滤器。
我曾尝试使用基于表单的登录并且这种方法有效,但后来我失去了使用邮递员之类的应用程序来测试我的 rest-api 的能力(至少我认为是这种情况,因为我无法在请求本身中进行身份验证)
从前端到后端的请求时,如何避免显示基本的身份验证弹出窗口?
解决方案
这个奇妙的人解决了它:如何在发送前更改响应
他所做的是将这个添加到 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 并显示自定义登录屏幕,而无需基本身份验证弹出窗口。
推荐阅读
- bash - 远程运行与本地运行时,Bash while 循环的行为不同
- python - numpy:如何将两个排序数组合并成一个更大的排序数组?
- python - 尝试计算线性回归并将其显示在 matplotlib 图表中时出现奇怪的结果
- spring-boot - 你应该把 JWT 令牌放在哪里?
- node.js - Stripe IOS 与 Firebase 集成:创建付款意图不起作用
- c# - Blazor 服务器方法调用和执行详细信息
- sequelize-cli - 如何显示在 sequelize-cli 迁移中执行的 SQL,以供以后在生产更新中使用
- android - 如何在类(我创建的)中不断更改变量的值
- android - Windows 10 中的 Cordova CLI Android/gradle
- graphql - graphql如何打开查询变量面板