我有两个应用,两个战争,app-rest和app-web。App-rest是持有rest-api的后端,app-web是持有react GUI的前端。
我想使用basic auth来保证后端的安全,但是当这样做的时候,前台的ajax请求会在浏览器中触发一个basic auth弹窗。
我使用Glassfish作为应用服务器。
我试着保护两个应用程序的安全,希望它们能共享会话cookie,但似乎不是这样。
我也试过使用java过滤器来尝试删除未经授权的WWW-authenticate头,因为我读到那个头会触发弹出窗口,但是过滤器在基本的auth初始化过程中没有被激活。
我试过使用基于表单的登录,那是一种工作,但是我失去了使用像postman这样的应用程序来测试我的rest-api的能力(至少我认为是这样的,因为我不能在请求本身中进行认证)。
当我从前端向后端进行请求时,如何避免显示基本的auth弹出窗口?
这个奇妙的人解决了。如何在发送前更改响应
他所做的是在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 然后显示一个自定义的登录界面,不需要基本的auth弹出。