java - 编程中的 session 复制(Weblogic 和 Java)

标签 java session jakarta-ee weblogic replication

我想知道调用session.setAttribute或session.getAttribute的对象是否也需要实现“java.io.Serialized”以支持 session 复制?

例如
User 类实现了 Serialized 接口(interface)。 但如果调用“session.setAttribute”的类SomeUtilityClass需要实现Serialized接口(interface)。


/* Does it also need to implement the Serializable here? */
public class SomeUtilityClass{
    public void test(HttpServletRequest request){
        request.getSession().setAttribute("user", new User());
    }
}

public class User implements Serializable{
        private static final long serialVersionUID = 12345432534456654664L;
        //skip the getter & setter...
}

如果 session 复制中省略了变量serialVersionUID,是否会出现任何问题?

提前致谢。

最佳答案

只有进入 session 的对象才需要可序列化(即实现 Serialized 接口(interface))

这意味着设置为属性的任何对象,以及这些对象中包含的任何对象。

如果你有课

public class User implements Serializable {
      private Department department;

// ...
}

那么你的Department类也需要实现Serialized

简单地在 session 上进行调用的类(包括对 setAttribute 的调用)不需要实现 Serialized(包括 SomeUtilityClass)

原因是 session 中的任何内容都必须发送到其他 WebLogic 节点(可能在不同的服务器上运行)。这意味着它需要通过网络发送您的 User 类,因此它需要能够将您的 User 类转换为一系列可以发送的字节,然后在另一面再次将其变回真实物体。

当你实现Serialized接口(interface)时,你就是在告诉Java你已经以一种可以将类转入这些字节(然后再转回来)的方式构建了你的类。如果你没有实现Serialized,那么Java不知道是否可以这样做,所以它不会这样做。 注意:类的代码不会被发送,只是发送其中字段的值。该代码已经在另一个节点上,因为它是已经部署到所有节点的应用程序的一部分。

您的实用程序类不需要通过网络。您还没有将该类的对象放入 session 中,因此 WebLogic 不需要将其转换为字节(然后再返回_)作为 session 复制的一部分。
唯一需要可序列化的是直接放入 session 的对象(例如您的User)或间接(如部门示例)。
仅在 session 上进行调用的对象不需要可序列化

关于java - 编程中的 session 复制(Weblogic 和 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894630/

相关文章:

java - 使用发送重定向到 JSP

java - 在Android中从适配器访问Fragment内的类

java - RecyclerView 正在复制列表中的前三个项目

java - 如何修复 QueryFullProcessImageName 抛出 "A device attached to the system is not functioning"?

java - "Actual or formal argument lists differs in length"

java - 使用 web.xml 和 setMaxInactiveInterval 设置 session 超时之间的区别

java - 制作一个 BrainF*ck 解释器,循环遇到麻烦

java - Spring Security - 公共(public)页面重定向到使用无效 session ID 登录

php - 用于测试目的的对本地主机的简单 session 固定攻击

java - 如何删除eclipse中不需要的jar文件和其他库?