001    package com.bekk.boss.pluto.embedded.jetty.util;
002    
003    import org.mortbay.jetty.servlet.AbstractSessionManager;
004    import org.mortbay.jetty.servlet.HashSessionManager;
005    
006    import javax.servlet.http.Cookie;
007    import javax.servlet.http.HttpSession;
008    import java.lang.reflect.Field;
009    
010    /**
011     * @author Nils-Helge Garli
012     */
013    public class PlutoJettySessionManager extends HashSessionManager {
014    
015        public Cookie access(HttpSession session, boolean secure) {
016            if (session instanceof AbstractSessionManager.Session) {
017                return super.access(session, secure);
018            } else {
019                try {
020                    Field sessionField = session.getClass().getDeclaredField(
021                            "httpSession");
022                    sessionField.setAccessible(true);
023                    HttpSession sess = (HttpSession) sessionField.get(session);
024                    return super.access(sess, secure);
025                } catch (Exception e) {
026                    throw new RuntimeException(e.getMessage(), e);
027                }
028            }
029        }
030    
031        /**
032         * @author Lee Butts
033         */
034        public void complete(HttpSession session) {
035            if (session instanceof AbstractSessionManager.Session) {
036                super.complete(session);
037            } 
038        }
039    }