gpt4 book ai didi

java - 托管在不同服务器上的 JavaScript 前端的 JEE session

转载 作者:行者123 更新时间:2023-12-02 04:09:59 26 4
gpt4 key购买 nike

我在构建 Java JEE 后端来处理 session (与 tomcat 一起提供的 JEE servlet)时遇到问题。

我的前端位于另一台没有 Java、只有 html 和 JavaScript 的服务器上。 JavaScript 使用 ajax 将用户名和密码发布到后端服务器,该服务器将创建一个 session :

   session = request.getSession();
session.setAttribute("email", email);
session.setAttribute("auth", "1");

当前端认证后再次通过javascript联系后端时,Java找不到创建的Session。以下是我在 auth 设置为 1 后查找 session 的方式:

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 服务器,这对我来说现在无法处理。

最佳答案

如果负载平衡是您的要求,那么我认为您应该检查您的服务器架构。前端文件(即 HTML、Javascript 和图像)全部下载到客户端计算机,这就是这些文件的实际执行发生的地方。如果您有多个仅用于 HTML 和 Javascript 的服务器,那么这对资源来说是一种过度的浪费,因为这些服务器只能作为下载 HTML 和 Javascript 文件的一种方式。如果您需要为前端文件提供多个下载源,那么您可以使用 CDN 服务器,并且可以从这些源下载前端内容。

真正的操作总是发生在 Tomcat 服务器中,来自客户端计算机的所有 Ajax 调用都来自该服务器并汇聚,后端代码的执行和后端数据的处理都在服务器计算机中进行。因此,您应该考虑提供 Tomcat 集群服务器来处理负载。然后使 session 在这些 Tomcat 集群上保持粘性。因此,前端用户请求之间不会发生 session 混合。 session 存储对于域或子域是唯一的。因此,通常不可能在多个域或子域之间共享 session 。如果您有集群 Tomcat 服务器,那么粘性 session 将帮助您避免此问题。那么自然就有一个带反向代理的负载均衡器,用于白标。

前后端代码分离实际上需要通过良好的编码架构来实现,而不是为js和后端tomcat文件提供不同的服务器。如果你没有良好的编码结构,那么即使你有不同的 js 和后端文件服务器,你最终也可能会出现前端和后端代码交叉的情况。

关于java - 托管在不同服务器上的 JavaScript 前端的 JEE session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56696230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com