Session 反序列化wl_会话_值weblogic会话

Session 反序列化wl_会话_值weblogic会话,session,jakarta-ee,weblogic,deserialization,Session,Jakarta Ee,Weblogic,Deserialization,我需要使用JDBC持久性来管理服务器会话。现在我需要将会话值(保存在wl_会话值中)转换为真实对象。下面我写下我的代码: try { String userName = "root"; String password = "****"; String url = "jdbc:mysql://localhost:3306/test"; Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConn

我需要使用JDBC持久性来管理服务器会话。现在我需要将会话值(保存在wl_会话值中)转换为真实对象。下面我写下我的代码:

try {
String userName = "root";
String password = "****";
String url = "jdbc:mysql://localhost:3306/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, userName, password);

PreparedStatement pstmt = null;
String query = "select * from wl_servlet_sessions";
pstmt = conn.prepareStatement(query);
ResultSet resultSet = pstmt.executeQuery();

while(resultSet.next()){
    System.out.println(resultSet.getString("wl_id"));

    Blob blob = resultSet.getBlob("wl_session_values");
    InputStream in = blob.getBinaryStream();
    ObjectInputStream ois = new ObjectInputStream(in);

    Hashtable<Object, Object> hash = (Hashtable)ois.readObject();
        for(Map.Entry<Object, Object> newHash : hash.entrySet()){
        System.out.println("Key : " + newHash.getKey().toString());
        System.out.println("Value : " + newHash.getValue().toString());
    }
}

} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (conn != null) {
    try {
        conn.close();
    } catch (Exception e) { e.printStackTrace(); }
}
试试看{
字符串userName=“root”;
字符串密码=“****”;
String url=“jdbc:mysql://localhost:3306/test";
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
conn=DriverManager.getConnection(url、用户名、密码);
PreparedStatement pstmt=null;
String query=“从wl\U servlet\U会话中选择*”;
pstmt=conn.preparest陈述(查询);
ResultSet ResultSet=pstmt.executeQuery();
while(resultSet.next()){
System.out.println(resultSet.getString(“wl_id”);
Blob Blob=resultSet.getBlob(“wl_会话_值”);
InputStream in=blob.getBinaryStream();
ObjectInputStream ois=新ObjectInputStream(in);
Hashtable hash=(Hashtable)ois.readObject();
对于(Map.Entry newHash:hash.entrySet()){
System.out.println(“Key:+newHash.getKey().toString());
System.out.println(“值:+newHash.getValue().toString());
}
}
}捕获(例外e){
e、 printStackTrace();
}最后{
如果(conn!=null){
试一试{
康涅狄格州关闭();
}catch(异常e){e.printStackTrace();}
}
但是当我尝试反序列化结果时,我总是得到
java.io.StreamCorruptedException:invalid stream header:73720013


谢谢您的帮助。

这些都是私人API,所以我会远离它们


您可以解决在实现中遇到的问题。

这些都是私有API,所以我会远离它们


您可以解决在实现您的like in时遇到的问题。

嗨,antispam,实际上我的要求要复杂得多。因此,我需要一些以前从未实现过的解决方法(这就是我提出此问题的原因)。我需要获取所有会话数据并将其保存在应用程序上可用的静态变量中,我可以在群集环境中使其无效。我认为这种方法可以解决我的问题。但是,我认为我必须尝试另一种方法。您可以使用HttpSessionEvent.getSession()获取会话引用,然后使用session.getAttributeNames(),Session.getAttribute()和Session.invalidate()获取所有会话数据并在群集环境中使其失效。嗨,反垃圾邮件,我写了另一个问题。这可能解释得更好。嗨,反垃圾邮件,实际上我的要求要复杂得多。所以我需要一些以前从未实现过的解决方法(这就是我问这个问题的原因)。我需要获取所有会话数据并将其保存在应用程序上可用的静态变量中,我可以在群集环境中使其无效。我认为这种方法可以解决我的问题。但是,我认为我必须尝试另一种方法。您可以使用HttpSessionEvent.getSession()获取会话引用,然后使用session.getAttributeNames(),Session.getAttribute()和Session.invalidate()以获取所有会话数据并在群集环境中使其失效。嗨,反垃圾邮件,我写了另一个问题。它可能会解释得更好。