X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fsecurity%2FHashCrossContextPsuedoSession.java;fp=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fsecurity%2FHashCrossContextPsuedoSession.java;h=8499a609d3ada1d166e8a628caade60a2d48246e;hp=0000000000000000000000000000000000000000;hb=73ef54a38e3930a1a789cdc6b5fa23cdd4c9d086;hpb=515007c7c1351045420669d65b59c08fa46850f2 diff --git a/lib/jetty/org/eclipse/jetty/security/HashCrossContextPsuedoSession.java b/lib/jetty/org/eclipse/jetty/security/HashCrossContextPsuedoSession.java new file mode 100644 index 00000000..8499a609 --- /dev/null +++ b/lib/jetty/org/eclipse/jetty/security/HashCrossContextPsuedoSession.java @@ -0,0 +1,99 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.security; + +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @version $Rev: 4660 $ $Date: 2009-02-25 17:29:53 +0100 (Wed, 25 Feb 2009) $ + */ +public class HashCrossContextPsuedoSession implements CrossContextPsuedoSession +{ + private final String _cookieName; + + private final String _cookiePath; + + private final Random _random = new SecureRandom(); + + private final Map _data = new HashMap(); + + public HashCrossContextPsuedoSession(String cookieName, String cookiePath) + { + this._cookieName = cookieName; + this._cookiePath = cookiePath == null ? "/" : cookiePath; + } + + public T fetch(HttpServletRequest request) + { + Cookie[] cookies = request.getCookies(); + if (cookies == null) + return null; + + for (Cookie cookie : cookies) + { + if (_cookieName.equals(cookie.getName())) + { + String key = cookie.getValue(); + return _data.get(key); + } + } + return null; + } + + public void store(T datum, HttpServletResponse response) + { + String key; + + synchronized (_data) + { + // Create new ID + while (true) + { + key = Long.toString(Math.abs(_random.nextLong()), 30 + (int) (System.currentTimeMillis() % 7)); + if (!_data.containsKey(key)) break; + } + + _data.put(key, datum); + } + + Cookie cookie = new Cookie(_cookieName, key); + cookie.setPath(_cookiePath); + response.addCookie(cookie); + } + + public void clear(HttpServletRequest request) + { + for (Cookie cookie : request.getCookies()) + { + if (_cookieName.equals(cookie.getName())) + { + String key = cookie.getValue(); + _data.remove(key); + break; + } + } + } +}