Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  */
 
 package com.sun.web.server;
 
 
 //END OF IASRI 4660742
 
This class implements the Tomcat InstanceListener interface and handles the INIT,DESTROY and SERVICE, FILTER events.

Author(s):
Vivek Nagar
Tony Ng
 
 public final class J2EEInstanceListener implements InstanceListener {
 
     private static final Logger _logger = .....;
 
     private static final ResourceBundle _rb = .getResourceBundle();
 
     @LogMessageInfo(
             message = "*** InstanceEvent: {0}",
             level = "FINEST")
     public static final String INSTANCE_EVENT = "AS-WEB-00342";
 
     @LogMessageInfo(
             message = "Obtained securityContext implementation class {0}",
             level = "FINE")
     public static final String SECURITY_CONTEXT_OBTAINED = "AS-WEB-00343";
 
     @LogMessageInfo(
             message = "Failed to obtain securityContext implementation class",
            level = "FINE")
    public static final String SECURITY_CONTEXT_FAILED = "AS-WEB-00344";
            message = "Exception during processing of event of type {0} for web module {1}",
            level = "SEVERE",
            cause = "An exception occurred during processing event type",
            action = "Check the exception for the error")
    public static final String EXCEPTION_DURING_HANDLE_EVENT = "AS-WEB-00345";
            message = "No ServerContext in WebModule [{0}]",
            level = "WARNING")
    public static final String NO_SERVER_CONTEXT = "AS-WEB-00346";
    private InvocationManager im;
    private JavaEETransactionManager tm;
    private boolean initialized = false;
    public J2EEInstanceListener() {
    }
    public void instanceEvent(InstanceEvent event) {
        Context context = (Contextevent.getWrapper().getParent();
        if (!(context instanceof WebModule)) {
            return;
        }
        WebModule wm = (WebModule)context;
        init(wm);
        InstanceEvent.EventType eventType = event.getType();
        if(.isLoggable(.)) {
            .log(.eventType);
        }
        if (eventType.isBefore) {
            handleBeforeEvent(eventeventType);
        } else {
            handleAfterEvent(eventeventType);
        }
    }
    private synchronized void init(WebModule wm) {
        if () {
            return;
        }
        ServerContext serverContext = wm.getServerContext();
        if (serverContext == null) {
            String msg = .getString();
            msg = MessageFormat.format(msgwm.getName());
            throw new IllegalStateException(msg);
        }
        ServiceLocator services = serverContext.getDefaultServices();
         = services.getService(InvocationManager.class);
         = getJavaEETransactionManager(services);
         = services.getService(InjectionManager.class);
         = true;
         = serverContext.getDefaultServices().getService(AppServSecurityContext.class);
        if ( != null) {
            if (.isLoggable(.)) {
                .log(.);
            }
        } else {
            if (.isLoggable(.)) {
                .log(.);
            }
        }
    }
    private void handleBeforeEvent(InstanceEvent eventInstanceEvent.EventType eventType) {
        Context context = (Contextevent.getWrapper().getParent();
        if (!(context instanceof WebModule)) {
            return;
        }
        WebModule wm = (WebModule)context;
        Object instance;
        if (eventType == ..) {
            instance = event.getFilter();
        } else {
            instance = event.getServlet();
        }
        // set security context
        // BEGIN IAfSRI 4688449
        //try {
        Realm ra = context.getRealm();
        
IASRI 4713234 if (ra != null) { HttpServletRequest request = (HttpServletRequest) event.getRequest(); if (request != null && request.getUserPrincipal() != null) { WebPrincipal prin = (WebPrincipal) request.getUserPrincipal(); // ra.authenticate(prin); // It is inefficient to call authenticate just to set // sec.ctx. Instead, WebPrincipal modified to keep the // previously created secctx, and set it here directly. SecurityContext.setCurrent(prin.getSecurityContext()); } }
        // START OF IASRI 4713234
        if (ra != null) {
            ServletRequest request = event.getRequest();
            if (request != null && request instanceof HttpServletRequest) {
                HttpServletRequest hreq = (HttpServletRequest)request;
		HttpServletRequest base = hreq;
		Principal prin = hreq.getUserPrincipal();
		Principal basePrincipal = prin;
		boolean wrapped = false;
		while (prin != null) {
		    if (base instanceof ServletRequestWrapper) {
			// unwarp any wrappers to find the base object
			    ((ServletRequestWrapperbase).getRequest();
			if (sr instanceof HttpServletRequest) {
			    base = (HttpServletRequestsr;
			    wrapped = true;
			    continue;
			}
		    }
		    if (wrapped) {
			basePrincipal = base.getUserPrincipal();
		    }
		    else if (base instanceof RequestFacade) {
			// try to avoid the getUnWrappedCoyoteRequest call
			// when we can identify see we have the texact class.
			if (base.getClass() != RequestFacade.class) {
			    basePrincipal = ((RequestFacade)base).
			}
		    } else {
			basePrincipal = base.getUserPrincipal();
		    }
		    break;
		}
		if (prin != null && prin == basePrincipal &&
                        prin.getClass().getName().equals(.)) {
                    .setSecurityContextWithPrincipal(prin);
else if (prin != basePrincipal) {
		    // the wrapper has overridden getUserPrincipal
		    // reject the request if the wrapper does not have
		    // the necessary permission.
                    .setSecurityContextWithPrincipal(prin);
		}
	    }
        }
        // END OF IASRI 4713234
        // END IASRI 4688449
        ComponentInvocation inv = new WebComponentInvocation(wminstance);
        try {
            .preInvoke(inv);
            if (eventType == ..) {
                // Emit monitoring probe event
                wm.beforeServiceEvent(event.getWrapper().getName());
                // enlist resources with TM for service method
                if ( != null) {
                    .enlistComponentResources();
                }
            }
        } catch (Exception ex) {
            .postInvoke(inv); // See CR 6920895
            String msg = .getString();
            msg = MessageFormat.format(msgnew Object[] { eventTypewm });
            throw new RuntimeException(msgex);
        }
    }
 	new javax.security.auth.AuthPermission("doAsPrivileged");
    private static void checkObjectForDoAsPermission(final Object o)
            throws AccessControlException{
	if (System.getSecurityManager() != null) {
	    AccessController.doPrivileged(new PrivilegedAction<Void>() {
		public Void run() {
		    Policy p = Policy.getPolicy();
		    if (!p.implies(pD,)) {
			    ("permission required to override getUserPrincipal",
		    }
		    return null;
		}
	    });
	}
    }
    private void handleAfterEvent(InstanceEvent event,
                InstanceEvent.EventType eventType) {
        Wrapper wrapper = event.getWrapper();
        Context context = (Contextwrapper.getParent();
        if (!(context instanceof WebModule)) {
            return;
        }
        WebModule wm = (WebModule)context;
        Object instance;
        if (eventType == ..) {
            instance = event.getFilter();
        } else {
            instance = event.getServlet();
        }
        if (instance == null) {
            return;
        }
        // Emit monitoring probe event
        if (instance instanceof Servlet) {
            if (eventType == ..) {
                wm.servletInitializedEvent(wrapper.getName());
            } else if (eventType == ..) {
                wm.servletDestroyedEvent(wrapper.getName());
            }
        }
        // Must call InjectionManager#destroyManagedObject WITHIN
        // EE invocation context
        try {
            if (eventType == .. &&
                    !DefaultServlet.class.equals(instance.getClass()) &&
                    !JspServlet.class.equals(instance.getClass())) {
                .destroyManagedObject(instancefalse);
            }
        } catch (InjectionException ie) {
            String msg = .getString();
            msg = MessageFormat.format(msgnew Object[] { eventTypewm });
            .log(.msgie);
        }
        ComponentInvocation inv = new WebComponentInvocation(wminstance);
        try {
            .postInvoke(inv);
        } catch (Exception ex) {
            String msg = .getString();
            msg = MessageFormat.format(msgnew Object[] { eventTypewm });
            throw new RuntimeException(msgex);
        } finally {
            if (eventType == ..) {
                if ( != null) {
                    .componentDestroyed(instanceinv);
                }
            } else if (eventType == .. ||
                    eventType == ..) {
                // Emit monitoring probe event
                if (eventType == ..) {
                    ServletResponse response = event.getResponse();
                    int status = -1;
                    if (response != null &&
                            response instanceof HttpServletResponse) {
                        status = ((HttpServletResponseresponse).getStatus();
                    }
                    wm.afterServiceEvent(wrapper.getName(), status);
                }
                // check it's top level invocation
                // BEGIN IASRI# 4646060
                if (.getCurrentInvocation() == null) {
                // END IASRI# 4646060
                    try {
                        // clear security context
                        Realm ra = context.getRealm();
                        if (ra != null && (ra instanceof RealmInitializer)) {
                            //cleanup not only securitycontext but also PolicyContext
                            ((RealmInitializer)ra).logout();
                            //securityContext.setCurrentSecurityContext(null);
                        }
                    } catch (Exception ex) {
                        String msg = .getString();
                        msg = MessageFormat.format(msgnew Object[] { eventTypewm });
                        .log(.msg,  ex);
                    }
                    if ( != null) {
                        try {
                            if (.getTransaction() != null) {
                                .rollback();
                            }
                            .cleanTxnTimeout();
                        } catch (Exception ex) {}
                    }
                }
                if ( != null) {
                    .componentDestroyed(instanceinv);
                }
            }
        }
    }
        JavaEETransactionManager tm = null;
        if (inhabitant != null && inhabitant.isActive()) {
            tm = inhabitant.getService();
        }
        
        return tm;
    }
New to GrepCode? Check out our FAQ X