【问题标题】:is it good to store a non-serializable object as an HttpSession attribute?将不可序列化的对象存储为 HttpSession 属性是否很好?
【发布时间】:2017-06-02 23:59:24
【问题描述】:

我正在使用 fortify web 应用程序,它指出以下代码存在问题,因为方法 addToSession() 将不可序列化的对象存储为 HttpSession 属性,这可能会损害应用程序的可靠性。

public class DataGlob {
   String globName;
   String globValue;

   public void addToSession(HttpSession session) {
     session.setAttribute("glob", this);
   }
}

它建议我执行以下操作。

public class DataGlob implements java.io.Serializable {
   String globName;
   String globValue;

   public void addToSession(HttpSession session) {
     session.setAttribute("glob", this);
   }
}

我是否需要按照它向我推荐的那样更改代码,还是无需更改就可以?

【问题讨论】:

    标签: java jakarta-ee serializable httpsession fortify


    【解决方案1】:

    建议存储在会话中的所有属性都是可序列化的。它不是必需的,但将来可能会有用。

    为了支持故障转移,应用程序服务器可以将会话数据保存在磁盘上或通过网络传输,以便集群中的另一个节点可以继续为会话提供服务。为了支持这一点,存储在会话中的所有数据都需要可序列化。

    【讨论】:

      【解决方案2】:

      HttpSession 内容应该是可序列化的,以使容器能够将会话存储到磁盘或将会话传输到集群中的另一个节点。
      所以最好让你的类 Serializable 以避免以后的序列化问题。

      【讨论】:

      • 不得不处理懒惰的程序员不维护可序列化会话对象的后果,我完全同意这个答案。只需这样做,以后可以为自己或其他人节省一些痛苦。
      猜你喜欢
      • 2015-01-11
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2017-03-21
      • 1970-01-01
      相关资源
      最近更新 更多