【发布时间】:2019-11-03 21:06:21
【问题描述】:
我在构建 Java JEE 后端以处理会话时遇到问题(JEE servlet 与 tomcat 一起提供)。
我的前端在另一台没有 Java 的服务器上,只有 html 和 JavaScript。 JavaScript 使用 ajax 将用户名和密码发布到将创建会话的后端服务器:
session = request.getSession();
session.setAttribute("email", email);
session.setAttribute("auth", "1");
当前端认证后再次通过javascript联系后端时,Java找不到创建的会话。以下是我在 auth 设置为 1 后寻找会话的方式:
HttpSession session = request.getSession();
String auth = (String) session.getAttribute("auth");
if (auth == null || !auth.equals("1")) {
session.invalidate();// destroy any session that they may have
System.out.println("Invalid Session");
JsonGenerator gen = Json.createGenerator(response.getWriter());
gen.writeStartObject().write("status", "expired").writeNull("data")
.write("message", "Your session has expired").writeEnd();
gen.close();
return;
}
当前端和后端都托管在具有相同域名的同一台服务器上时,一切正常。但当前端和后端位于具有不同域名的不同服务器上时则不然。我应该如何构造它以便Java可以在前端联系它时检查auth==1?
这是我使用 Ajax 联系后端服务器的方式:
post_url = 'http://backend.anotherserver.com/api/datapoint'
$.ajax({
url: post_url,
timeout: 10000,
method: 'POST',
dataType: 'json',
success: function (json) {
if (json.status == 'success' && json.data) {
// do something
}
})
前端和后端的域名不同。在我让一个前端工作之后,我将创建一个具有不同域名的第二个前端,以及第三个、第四个等。它们都将使用相同的后端,并且所有前端都需要能够通过后端进行身份验证.我不想使用 oauth 服务器,这对我来说太多了。
【问题讨论】:
-
我不确定我是否正确。您是否有相同的应用程序在不同域名的不同前端服务器上运行?例如,您在 3 个不同的前端服务器上运行相同的 TODO 列表应用程序,并且您的用户应该使用 www.mytodo1.com、www.mytodo2.com 和 www.mytodo3.com。这些前端服务器会反过来访问后端tomcat服务器backend.mytodo.com?
-
是的 Zapping 是正确的。前端是 mytodo1 mytodo2 和 mytodo3,它们与 mytodo 位于不同的服务器上。如果我在 Tomcat 托管的同一台机器上的同一个 java webapp 中创建了一个都称为 mytodo 的前端和后端,那么它可以正常工作。但是前后端分离的时候,session就不行了
-
我想我仍然没有达到目的。你有这个是为了负载平衡你的应用程序吗?
-
白标、负载均衡、前后端代码分离。但是,后端服务器确实有一份由 Tomcat 提供的前端代码副本,仅用于测试。后端代码基本上只是一个 API。前端是接触api的html和javascript。
标签: java ajax session-cookies backend session-state