📄 hashsessionmanager.java
字号:
{ Log.warn(e); } if (_sessions==null) return null; return (Session)_sessions.get(idInCluster); } /* ------------------------------------------------------------ */ protected void invalidateSessions() { // Invalidate all sessions to cause unbind events ArrayList sessions=new ArrayList(_sessions.values()); for (Iterator i=sessions.iterator(); i.hasNext();) { Session session=(Session)i.next(); session.invalidate(); } _sessions.clear(); } /* ------------------------------------------------------------ */ protected AbstractSessionManager.Session newSession(HttpServletRequest request) { return new Session(request); } /* ------------------------------------------------------------ */ protected void removeSession(String clusterId) { _sessions.remove(clusterId); } public void setStoreDirectory (File dir) { _storeDir=dir; } public File getStoreDirectory () { return _storeDir; } public void setLazyLoad(boolean lazyLoad) { _lazyLoad = lazyLoad; } public boolean isLazyLoad() { return _lazyLoad; } public void restoreSessions () throws Exception { if (_storeDir==null || !_storeDir.exists()) { return; } if (!_storeDir.canRead()) { Log.warn ("Unable to restore Sessions: Cannot read from Session storage directory "+_storeDir.getAbsolutePath()); return; } File[] files = _storeDir.listFiles(); for (int i=0;files!=null&&i<files.length;i++) { try { FileInputStream in = new FileInputStream(files[i]); Session session = restoreSession(in); in.close(); addSession(session, false); files[i].delete(); } catch (Exception e) { Log.warn("Problem restoring session "+files[i].getName(), e); } } _sessionsLoaded = true; } public void saveSessions () throws Exception { if (_storeDir==null || !_storeDir.exists()) { return; } if (!_storeDir.canWrite()) { Log.warn ("Unable to save Sessions: Session persistence storage directory "+_storeDir.getAbsolutePath()+ " is not writeable"); return; } synchronized (this) { Iterator itor = _sessions.entrySet().iterator(); while (itor.hasNext()) { Map.Entry entry = (Map.Entry)itor.next(); String id = (String)entry.getKey(); Session session = (Session)entry.getValue(); try { File file = new File (_storeDir, id); if (file.exists()) file.delete(); file.createNewFile(); FileOutputStream fos = new FileOutputStream (file); session.save(fos); fos.close(); } catch (Exception e) { Log.warn("Problem persisting session "+id, e); } } } } public Session restoreSession (FileInputStream fis) throws Exception { /* * Take care of this class's fields first by calling * defaultReadObject */ DataInputStream in = new DataInputStream(fis); String clusterId = in.readUTF(); String nodeId = in.readUTF(); boolean idChanged = in.readBoolean(); long created = in.readLong(); long cookieSet = in.readLong(); long accessed = in.readLong(); long lastAccessed = in.readLong(); //boolean invalid = in.readBoolean(); //boolean invalidate = in.readBoolean(); //long maxIdle = in.readLong(); //boolean isNew = in.readBoolean(); int requests = in.readInt(); Session session = new Session (created, clusterId); session._cookieSet = cookieSet; session._lastAccessed = lastAccessed; int size = in.readInt(); if (size > 0) { ArrayList keys = new ArrayList(); for (int i=0; i<size; i++) { String key = in.readUTF(); keys.add(key); } ClassLoadingObjectInputStream ois = new ClassLoadingObjectInputStream(in); for (int i=0;i<size;i++) { Object value = ois.readObject(); session.setAttribute((String)keys.get(i),value); } ois.close(); } else session.initValues(); in.close(); return session; } /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ protected class Session extends AbstractSessionManager.Session { /* ------------------------------------------------------------ */ private static final long serialVersionUID=-2134521374206116367L; /* ------------------------------------------------------------- */ protected Session(HttpServletRequest request) { super(request); } protected Session(long created, String clusterId) { super(created, clusterId); } /* ------------------------------------------------------------- */ public void setMaxInactiveInterval(int secs) { super.setMaxInactiveInterval(secs); if (_maxIdleMs>0&&(_maxIdleMs/10)<_scavengePeriodMs) HashSessionManager.this.setScavengePeriod((secs+9)/10); } /* ------------------------------------------------------------ */ protected Map newAttributeMap() { return new HashMap(3); } public void invalidate () throws IllegalStateException { super.invalidate(); remove(getId()); } public void remove (String id) { if (id==null) return; //all sessions are invalidated when jetty is stopped, make sure we don't //remove all the sessions in this case if (isStopping() || isStopped()) return; if (_storeDir==null || !_storeDir.exists()) { return; } File f = new File(_storeDir, id); f.delete(); } public void save(FileOutputStream fos) throws IOException { DataOutputStream out = new DataOutputStream(fos); out.writeUTF(_clusterId); out.writeUTF(_nodeId); out.writeBoolean(_idChanged); out.writeLong( _created); out.writeLong(_cookieSet); out.writeLong(_accessed); out.writeLong(_lastAccessed); /* Don't write these out, as they don't make sense to store because they * either they cannot be true or their value will be restored in the * Session constructor. */ //out.writeBoolean(_invalid); //out.writeBoolean(_doInvalidate); //out.writeLong(_maxIdleMs); //out.writeBoolean( _newSession); out.writeInt(_requests); if (_values != null) { out.writeInt(_values.size()); Iterator itor = _values.keySet().iterator(); while (itor.hasNext()) { String key = (String)itor.next(); out.writeUTF(key); } itor = _values.values().iterator(); ObjectOutputStream oos = new ObjectOutputStream(out); while (itor.hasNext()) { oos.writeObject(itor.next()); } oos.close(); } else out.writeInt(0); out.close(); } } protected class ClassLoadingObjectInputStream extends ObjectInputStream { public ClassLoadingObjectInputStream(java.io.InputStream in) throws IOException { super(in); } public ClassLoadingObjectInputStream () throws IOException { super(); } public Class resolveClass (java.io.ObjectStreamClass cl) throws IOException, ClassNotFoundException { Class clazz; try { return Class.forName(cl.getName(), false, Thread.currentThread().getContextClassLoader()); } catch (ClassNotFoundException e) { return super.resolveClass(cl); } } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -