您的位置:首页 > Web前端

Liferay:系统启动,停止,运行相关的MainServlet

2011-09-12 13:53 495 查看
MainServlet是Liferay启动,停止,运行的主要管理Servlet。

在出现启动异常,停止异常等情况的时候可以查看该类分析是那个地方出错了。

6.0.5版本的类的代码copy过来了。

/**

* Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.

*

* This library is free software; you can redistribute it and/or modify it under

* the terms of the GNU Lesser General Public License as published by the Free

* Software Foundation; either version 2.1 of the License, or (at your option)

* any later version.

*

* This library is distributed in the hope that it will be useful, but WITHOUT

* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS

* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more

* details.

*/

package com.liferay.portal.servlet;

import com.liferay.portal.NoSuchLayoutException;

import com.liferay.portal.deploy.hot.PluginPackageHotDeployListener;

import com.liferay.portal.events.EventsProcessorUtil;

import com.liferay.portal.events.StartupAction;

import com.liferay.portal.kernel.cache.Lifecycle;

import com.liferay.portal.kernel.cache.ThreadLocalCacheManager;

import com.liferay.portal.kernel.deploy.hot.HotDeployUtil;

import com.liferay.portal.kernel.exception.PortalException;

import com.liferay.portal.kernel.exception.SystemException;

import com.liferay.portal.kernel.log.Log;

import com.liferay.portal.kernel.log.LogFactoryUtil;

import com.liferay.portal.kernel.plugin.PluginPackage;

import com.liferay.portal.kernel.scheduler.SchedulerEngineUtil;

import com.liferay.portal.kernel.scheduler.SchedulerEntry;

import com.liferay.portal.kernel.scheduler.SchedulerEntryImpl;

import com.liferay.portal.kernel.scheduler.TimeUnit;

import com.liferay.portal.kernel.scheduler.TriggerType;

import com.liferay.portal.kernel.search.IndexerRegistryUtil;

import com.liferay.portal.kernel.servlet.PortletSessionTracker;

import com.liferay.portal.kernel.servlet.ProtectedServletRequest;

import com.liferay.portal.kernel.servlet.ServletContextPool;

import com.liferay.portal.kernel.util.ContentTypes;

import com.liferay.portal.kernel.util.GetterUtil;

import com.liferay.portal.kernel.util.HttpUtil;

import com.liferay.portal.kernel.util.ParamUtil;

import com.liferay.portal.kernel.util.PortalClassLoaderUtil;

import com.liferay.portal.kernel.util.PortalLifecycleUtil;

import com.liferay.portal.kernel.util.PropsKeys;

import com.liferay.portal.kernel.util.ReleaseInfo;

import com.liferay.portal.kernel.util.StringPool;

import com.liferay.portal.kernel.xml.Document;

import com.liferay.portal.kernel.xml.DocumentException;

import com.liferay.portal.kernel.xml.Element;

import com.liferay.portal.kernel.xml.SAXReaderUtil;

import com.liferay.portal.model.Company;

import com.liferay.portal.model.Group;

import com.liferay.portal.model.GroupConstants;

import com.liferay.portal.model.Layout;

import com.liferay.portal.model.Portlet;

import com.liferay.portal.model.PortletApp;

import com.liferay.portal.model.PortletFilter;

import com.liferay.portal.model.PortletURLListener;

import com.liferay.portal.model.User;

import com.liferay.portal.plugin.PluginPackageIndexer;

import com.liferay.portal.security.auth.PrincipalException;

import com.liferay.portal.security.auth.PrincipalThreadLocal;

import com.liferay.portal.security.permission.ResourceActionsUtil;

import com.liferay.portal.service.CompanyLocalServiceUtil;

import com.liferay.portal.service.GroupLocalServiceUtil;

import com.liferay.portal.service.LayoutLocalServiceUtil;

import com.liferay.portal.service.LayoutTemplateLocalServiceUtil;

import com.liferay.portal.service.PortletLocalServiceUtil;

import com.liferay.portal.service.ResourceActionLocalServiceUtil;

import com.liferay.portal.service.ResourceCodeLocalServiceUtil;

import com.liferay.portal.service.ThemeLocalServiceUtil;

import com.liferay.portal.service.UserLocalServiceUtil;

import com.liferay.portal.servlet.filters.i18n.I18nFilter;

import com.liferay.portal.struts.PortletRequestProcessor;

import com.liferay.portal.struts.StrutsUtil;

import com.liferay.portal.util.ContentUtil;

import com.liferay.portal.util.ExtRegistry;

import com.liferay.portal.util.MaintenanceUtil;

import com.liferay.portal.util.Portal;

import com.liferay.portal.util.PortalInstances;

import com.liferay.portal.util.PortalUtil;

import com.liferay.portal.util.PropsUtil;

import com.liferay.portal.util.PropsValues;

import com.liferay.portal.util.ShutdownUtil;

import com.liferay.portal.util.WebKeys;

import com.liferay.portlet.PortletBagFactory;

import com.liferay.portlet.PortletConfigFactoryUtil;

import com.liferay.portlet.PortletFilterFactory;

import com.liferay.portlet.PortletInstanceFactoryUtil;

import com.liferay.portlet.PortletURLListenerFactory;

import com.liferay.portlet.social.messaging.CheckEquityLogMessageListener;

import com.liferay.util.servlet.DynamicServletRequest;

import com.liferay.util.servlet.EncryptedServletRequest;

import java.io.IOException;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import javax.portlet.PortletConfig;

import javax.portlet.PortletContext;

import javax.portlet.PortletException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import javax.servlet.jsp.PageContext;

import org.apache.struts.Globals;

import org.apache.struts.action.ActionServlet;

import org.apache.struts.action.RequestProcessor;

import org.apache.struts.config.ControllerConfig;

import org.apache.struts.config.ModuleConfig;

import org.apache.struts.tiles.TilesUtilImpl;

/**

* @author Brian Wing Shun Chan

* @author Jorge Ferrer

* @author Brian Myunghun Kim

*/

public class MainServlet extends ActionServlet {

public void destroy() {

if (_log.isDebugEnabled()) {

_log.debug("Destroy plugins");

}

PortalLifecycleUtil.flushDestroys();

List<Portlet> portlets = PortletLocalServiceUtil.getPortlets();

if (_log.isDebugEnabled()) {

_log.debug("Destroy schedulers");

}

try {

destroySchedulers(portlets);

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Destroy portlets");

}

try {

destroyPortlets(portlets);

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Destroy companies");

}

try {

destroyCompanies();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Process global shutdown events");

}

try {

processGlobalShutdownEvents();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Destroy");

}

callParentDestroy();

}

public void init() throws ServletException {

if (_log.isDebugEnabled()) {

_log.debug("Initialize");

}

callParentInit();

if (_log.isDebugEnabled()) {

_log.debug("Process startup events");

}

try {

processStartupEvents();

}

catch (Exception e) {

_log.error(e, e);

System.out.println(

"Stopping the server due to unexpected startup errors");

System.exit(0);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize servlet context pool");

}

try {

initServletContextPool();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize plugin package");

}

PluginPackage pluginPackage = null;

try {

pluginPackage = initPluginPackage();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize portlets");

}

List<Portlet> portlets = null;

try {

portlets = initPortlets(pluginPackage);

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize layout templates");

}

try {

initLayoutTemplates(pluginPackage, portlets);

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize themes");

}

try {

initThemes(pluginPackage, portlets);

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize social log scheduler");

}

try {

initSocialEquityLogScheduler();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize web settings");

}

try {

initWebSettings();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize extension environment");

}

try {

initExt();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Process global startup events");

}

try {

processGlobalStartupEvents();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize resource actions");

}

try {

initResourceActions(portlets);

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize resource codes");

}

try {

initResourceCodes(portlets);

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize companies");

}

try {

initCompanies();

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize message resources");

}

if (_log.isDebugEnabled()) {

_log.debug("Initialize plugins");

}

try {

initPlugins();

}

catch (Exception e) {

_log.error(e, e);

}

}

public void service(

HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

if (_log.isDebugEnabled()) {

_log.debug("Process service request");

}

if (processShutdownRequest(request, response)) {

if (_log.isDebugEnabled()) {

_log.debug("Processed shutdown request");

}

return;

}

if (processMaintenanceRequest(request, response)) {

if (_log.isDebugEnabled()) {

_log.debug("Processed maintenance request");

}

return;

}

if (_log.isDebugEnabled()) {

_log.debug("Get company id");

}

long companyId = getCompanyId(request);

if (_log.isDebugEnabled()) {

_log.debug("Set portal port");

}

setPortalPort(request);

if (_log.isDebugEnabled()) {

_log.debug("Check variables");

}

checkServletContext(request);

checkPortletSessionTracker(request);

checkPortletRequestProcessor(request);

checkTilesDefinitionsFactory();

if (_log.isDebugEnabled()) {

_log.debug("Encrypt request");

}

request = encryptRequest(request, companyId);

long userId = getUserId(request);

String remoteUser = getRemoteUser(request, userId);

if (_log.isDebugEnabled()) {

_log.debug("Protect request");

}

request = protectRequest(request, remoteUser);

if (_log.isDebugEnabled()) {

_log.debug("Set principal");

}

setPrincipalName(userId, remoteUser);

try {

if (_log.isDebugEnabled()) {

_log.debug(

"Authenticate user id " + userId + " and remote user " +

remoteUser);

}

userId = loginUser(request, response, userId, remoteUser);

if (_log.isDebugEnabled()) {

_log.debug("Authenticated user id " + userId);

}

}

catch (Exception e) {

_log.error(e, e);

}

if (_log.isDebugEnabled()) {

_log.debug("Process service pre events");

}

if (processServicePre(request, response, userId)) {

if (_log.isDebugEnabled()) {

_log.debug("Processing service pre events has errors");

}

return;

}

if (hasAbsoluteRedirect(request)) {

if (_log.isDebugEnabled()) {

String currentURL = PortalUtil.getCurrentURL(request);

_log.debug(

"Current URL " + currentURL + " has absolute redirect");

}

return;

}

if (!hasThemeDisplay(request)) {

if (_log.isDebugEnabled()) {

String currentURL = PortalUtil.getCurrentURL(request);

_log.debug(

"Current URL " + currentURL +

" does not have a theme display");

}

return;

}

try {

if (_log.isDebugEnabled()) {

_log.debug("Call parent service");

}

callParentService(request, response);

}

finally {

if (_log.isDebugEnabled()) {

_log.debug("Process service post events");

}

processServicePost(request, response);

}

}

protected void callParentDestroy() {

super.destroy();

}

protected void callParentInit() throws ServletException {

super.init();

}

protected void callParentService(

HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

super.service(request, response);

}

protected void checkPortletRequestProcessor(HttpServletRequest request)

throws ServletException {

ServletContext servletContext = getServletContext();

PortletRequestProcessor portletReqProcessor =

(PortletRequestProcessor)servletContext.getAttribute(

WebKeys.PORTLET_STRUTS_PROCESSOR);

if (portletReqProcessor == null) {

ModuleConfig moduleConfig = getModuleConfig(request);

portletReqProcessor =

PortletRequestProcessor.getInstance(this, moduleConfig);

servletContext.setAttribute(

WebKeys.PORTLET_STRUTS_PROCESSOR, portletReqProcessor);

}

}

protected void checkPortletSessionTracker(HttpServletRequest request) {

HttpSession session = request.getSession();

if (session.getAttribute(WebKeys.PORTLET_SESSION_TRACKER) != null) {

return;

}

session.setAttribute(

WebKeys.PORTLET_SESSION_TRACKER,

PortletSessionTracker.getInstance());

}

protected void checkServletContext(HttpServletRequest request) {

ServletContext servletContext = getServletContext();

request.setAttribute(WebKeys.CTX, servletContext);

}

protected void checkTilesDefinitionsFactory() {

ServletContext servletContext = getServletContext();

if (servletContext.getAttribute(

TilesUtilImpl.DEFINITIONS_FACTORY) != null) {

return;

}

servletContext.setAttribute(

TilesUtilImpl.DEFINITIONS_FACTORY,

servletContext.getAttribute(TilesUtilImpl.DEFINITIONS_FACTORY));

}

protected void checkWebSettings(String xml) throws DocumentException {

Document doc = SAXReaderUtil.read(xml);

Element root = doc.getRootElement();

int timeout = PropsValues.SESSION_TIMEOUT;

Element sessionConfig = root.element("session-config");

if (sessionConfig != null) {

String sessionTimeout = sessionConfig.elementText(

"session-timeout");

timeout = GetterUtil.getInteger(sessionTimeout, timeout);

}

PropsUtil.set(PropsKeys.SESSION_TIMEOUT, String.valueOf(timeout));

PropsValues.SESSION_TIMEOUT = timeout;

I18nServlet.setLanguageIds(root);

I18nFilter.setLanguageIds(I18nServlet.getLanguageIds());

}

protected void destroyCompanies() throws Exception {

long[] companyIds = PortalInstances.getCompanyIds();

for (int i = 0; i < companyIds.length; i++) {

destroyCompany(companyIds[i]);

}

}

protected void destroyCompany(long companyId) {

if (_log.isDebugEnabled()) {

_log.debug("Process shutdown events");

}

try {

EventsProcessorUtil.process(

PropsKeys.APPLICATION_SHUTDOWN_EVENTS,

PropsValues.APPLICATION_SHUTDOWN_EVENTS,

new String[] {String.valueOf(companyId)});

}

catch (Exception e) {

_log.error(e, e);

}

}

protected void destroyPortlets(List<Portlet> portlets) throws Exception {

Iterator<Portlet> itr = portlets.iterator();

while (itr.hasNext()) {

Portlet portlet = itr.next();

PortletInstanceFactoryUtil.destroy(portlet);

}

}

protected void destroySchedulers(List<Portlet> portlets) throws Exception {

if (!PropsValues.SCHEDULER_ENABLED) {

return;

}

for (Portlet portlet : portlets) {

if (!portlet.isActive()) {

continue;

}

List<SchedulerEntry> schedulerEntries =

portlet.getSchedulerEntries();

if ((schedulerEntries == null) || schedulerEntries.isEmpty()) {

continue;

}

for (SchedulerEntry schedulerEntry : schedulerEntries) {

SchedulerEngineUtil.unschedule(schedulerEntry);

}

}

}

protected HttpServletRequest encryptRequest(

HttpServletRequest request, long companyId) {

boolean encryptRequest = ParamUtil.getBoolean(request, WebKeys.ENCRYPT);

if (!encryptRequest) {

return request;

}

try {

Company company = CompanyLocalServiceUtil.getCompanyById(

companyId);

request = new EncryptedServletRequest(

request, company.getKeyObj());

}

catch (Exception e) {

}

return request;

}

protected long getCompanyId(HttpServletRequest request) {

return PortalInstances.getCompanyId(request);

}

protected String getRemoteUser(

HttpServletRequest request, long userId) {

String remoteUser = request.getRemoteUser();

if (!PropsValues.PORTAL_JAAS_ENABLE) {

HttpSession session = request.getSession();

String jRemoteUser = (String)session.getAttribute("j_remoteuser");

if (jRemoteUser != null) {

remoteUser = jRemoteUser;

session.removeAttribute("j_remoteuser");

}

}

if ((userId > 0) && (remoteUser == null)) {

remoteUser = String.valueOf(userId);

}

return remoteUser;

}

protected synchronized RequestProcessor getRequestProcessor(

ModuleConfig moduleConfig)

throws ServletException {

ServletContext servletContext = getServletContext();

String key = Globals.REQUEST_PROCESSOR_KEY + moduleConfig.getPrefix();

RequestProcessor processor =

(RequestProcessor)servletContext.getAttribute(key);

if (processor == null) {

ControllerConfig controllerConfig =

moduleConfig.getControllerConfig();

String processorClass = controllerConfig.getProcessorClass();

ClassLoader classLoader = PortalClassLoaderUtil.getClassLoader();

try {

processor = (RequestProcessor)classLoader.loadClass(

processorClass).newInstance();

}

catch (Exception e) {

throw new ServletException(e);

}

processor.init(this, moduleConfig);

servletContext.setAttribute(key, processor);

}

return processor;

}

protected long getUserId(HttpServletRequest request) {

return PortalUtil.getUserId(request);

}

protected boolean hasAbsoluteRedirect(HttpServletRequest request) {

if (request.getAttribute(

AbsoluteRedirectsResponse.class.getName()) == null) {

return false;

}

else {

return true;

}

}

protected boolean hasThemeDisplay(HttpServletRequest request) {

if (request.getAttribute(WebKeys.THEME_DISPLAY) == null) {

return false;

}

else {

return true;

}

}

protected void initCompanies() throws Exception {

ServletContext servletContext = getServletContext();

String[] webIds = PortalInstances.getWebIds();

for (int i = 0; i < webIds.length; i++) {

PortalInstances.initCompany(servletContext, webIds[i]);

}

}

protected void initExt() throws Exception {

ServletContext servletContext = getServletContext();

ExtRegistry.registerPortal(servletContext);

}

protected void initLayoutTemplates(

PluginPackage pluginPackage, List<Portlet> portlets)

throws Exception {

ServletContext servletContext = getServletContext();

String[] xmls = new String[] {

HttpUtil.URLtoString(

servletContext.getResource(

"/WEB-INF/liferay-layout-templates.xml")),

HttpUtil.URLtoString(

servletContext.getResource(

"/WEB-INF/liferay-layout-templates-ext.xml"))

};

LayoutTemplateLocalServiceUtil.init(

servletContext, xmls, pluginPackage);

}

protected PluginPackage initPluginPackage() throws Exception {

ServletContext servletContext = getServletContext();

IndexerRegistryUtil.register(new PluginPackageIndexer());

return PluginPackageHotDeployListener.readPluginPackage(servletContext);

}

protected void initPlugins() throws Exception {

// See LEP-2885. Don't flush hot deploy events until after the portal

// has initialized.

HotDeployUtil.setCapturePrematureEvents(false);

PortalLifecycleUtil.flushInits();

}

protected void initPortletApp(

Portlet portlet, ServletContext servletContext)

throws PortletException {

PortletApp portletApp = portlet.getPortletApp();

PortletConfig portletConfig = PortletConfigFactoryUtil.create(

portlet, servletContext);

PortletContext portletContext = portletConfig.getPortletContext();

Set<PortletFilter> portletFilters = portletApp.getPortletFilters();

for (PortletFilter portletFilter : portletFilters) {

PortletFilterFactory.create(portletFilter, portletContext);

}

Set<PortletURLListener> portletURLListeners =

portletApp.getPortletURLListeners();

for (PortletURLListener portletURLListener : portletURLListeners) {

PortletURLListenerFactory.create(portletURLListener);

}

}

protected List<Portlet> initPortlets(PluginPackage pluginPackage)

throws Exception {

ServletContext servletContext = getServletContext();

String[] xmls = new String[] {

HttpUtil.URLtoString(

servletContext.getResource(

"/WEB-INF/" + Portal.PORTLET_XML_FILE_NAME_CUSTOM)),

HttpUtil.URLtoString(

servletContext.getResource("/WEB-INF/portlet-ext.xml")),

HttpUtil.URLtoString(

servletContext.getResource("/WEB-INF/liferay-portlet.xml")),

HttpUtil.URLtoString(

servletContext.getResource("/WEB-INF/liferay-portlet-ext.xml")),

HttpUtil.URLtoString(

servletContext.getResource("/WEB-INF/web.xml"))

};

PortletLocalServiceUtil.initEAR(servletContext, xmls, pluginPackage);

PortletBagFactory portletBagFactory = new PortletBagFactory();

portletBagFactory.setClassLoader(

PortalClassLoaderUtil.getClassLoader());

portletBagFactory.setServletContext(servletContext);

portletBagFactory.setWARFile(false);

List<Portlet> portlets = PortletLocalServiceUtil.getPortlets();

for (int i = 0; i < portlets.size(); i++) {

Portlet portlet = portlets.get(i);

portletBagFactory.create(portlet);

if (i == 0) {

initPortletApp(portlet, servletContext);

}

}

return portlets;

}

protected void initResourceActions(List<Portlet> portlets)

throws Exception {

Iterator<Portlet> itr = portlets.iterator();

while (itr.hasNext()) {

Portlet portlet = itr.next();

List<String> portletActions =

ResourceActionsUtil.getPortletResourceActions(

portlet.getPortletId());

ResourceActionLocalServiceUtil.checkResourceActions(

portlet.getPortletId(), portletActions);

List<String> modelNames =

ResourceActionsUtil.getPortletModelResources(

portlet.getPortletId());

for (String modelName : modelNames) {

List<String> modelActions =

ResourceActionsUtil.getModelResourceActions(modelName);

ResourceActionLocalServiceUtil.checkResourceActions(

modelName, modelActions);

}

}

}

protected void initResourceCodes(List<Portlet> portlets) throws Exception {

long[] companyIds = PortalInstances.getCompanyIdsBySQL();

Iterator<Portlet> itr = portlets.iterator();

while (itr.hasNext()) {

Portlet portlet = itr.next();

List<String> modelNames =

ResourceActionsUtil.getPortletModelResources(

portlet.getPortletId());

for (long companyId : companyIds) {

ResourceCodeLocalServiceUtil.checkResourceCodes(

companyId, portlet.getPortletId());

for (String modelName : modelNames) {

ResourceCodeLocalServiceUtil.checkResourceCodes(

companyId, modelName);

}

}

}

}

protected void initServletContextPool() throws Exception {

ServletContext servletContext = getServletContext();

String contextPath = PortalUtil.getPathContext();

ServletContextPool.put(contextPath, servletContext);

}

protected void initSocialEquityLogScheduler() throws Exception {

SchedulerEntry schedulerEntry = new SchedulerEntryImpl();

schedulerEntry.setEventListenerClass(

CheckEquityLogMessageListener.class.getName());

schedulerEntry.setTimeUnit(TimeUnit.MINUTE);

schedulerEntry.setTriggerType(TriggerType.SIMPLE);

schedulerEntry.setTriggerValue(

PropsValues.SOCIAL_EQUITY_EQUITY_LOG_CHECK_INTERVAL);

SchedulerEngineUtil.schedule(

schedulerEntry, PortalClassLoaderUtil.getClassLoader());

}

protected void initThemes(

PluginPackage pluginPackage, List<Portlet> portlets)

throws Exception {

ServletContext servletContext = getServletContext();

String[] xmls = new String[] {

HttpUtil.URLtoString(

servletContext.getResource(

"/WEB-INF/liferay-look-and-feel.xml")),

HttpUtil.URLtoString(

servletContext.getResource(

"/WEB-INF/liferay-look-and-feel-ext.xml"))

};

ThemeLocalServiceUtil.init(

servletContext, null, true, xmls, pluginPackage);

}

protected void initWebSettings() throws Exception {

ServletContext servletContext = getServletContext();

String xml = HttpUtil.URLtoString(

servletContext.getResource("/WEB-INF/web.xml"));

checkWebSettings(xml);

}

protected long loginUser(

HttpServletRequest request, HttpServletResponse response,

long userId, String remoteUser)

throws PortalException, SystemException {

if ((userId > 0) || (remoteUser == null)) {

return userId;

}

userId = GetterUtil.getLong(remoteUser);

EventsProcessorUtil.process(

PropsKeys.LOGIN_EVENTS_PRE, PropsValues.LOGIN_EVENTS_PRE, request,

response);

User user = UserLocalServiceUtil.getUserById(userId);

if (PropsValues.USERS_UPDATE_LAST_LOGIN) {

UserLocalServiceUtil.updateLastLogin(

userId, request.getRemoteAddr());

}

HttpSession session = request.getSession();

session.setAttribute(WebKeys.USER_ID, new Long(userId));

session.setAttribute(Globals.LOCALE_KEY, user.getLocale());

EventsProcessorUtil.process(

PropsKeys.LOGIN_EVENTS_POST, PropsValues.LOGIN_EVENTS_POST,

request, response);

return userId;

}

protected void processGlobalShutdownEvents() throws Exception {

EventsProcessorUtil.process(

PropsKeys.GLOBAL_SHUTDOWN_EVENTS,

PropsValues.GLOBAL_SHUTDOWN_EVENTS);

super.destroy();

}

protected void processGlobalStartupEvents() throws Exception {

EventsProcessorUtil.process(

PropsKeys.GLOBAL_STARTUP_EVENTS, PropsValues.GLOBAL_STARTUP_EVENTS);

}

protected boolean processMaintenanceRequest(

HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

if (!MaintenanceUtil.isMaintaining()) {

return false;

}

RequestDispatcher requestDispatcher = request.getRequestDispatcher(

"/html/portal/maintenance.jsp");

requestDispatcher.include(request, response);

return true;

}

protected void processServicePost(

HttpServletRequest request, HttpServletResponse response) {

try {

EventsProcessorUtil.process(

PropsKeys.SERVLET_SERVICE_EVENTS_POST,

PropsValues.SERVLET_SERVICE_EVENTS_POST, request, response);

}

catch (Exception e) {

_log.error(e, e);

}

response.addHeader(

_LIFERAY_PORTAL_REQUEST_HEADER, ReleaseInfo.getReleaseInfo());

ThreadLocalCacheManager.clearAll(Lifecycle.REQUEST);

}

protected boolean processServicePre(

HttpServletRequest request, HttpServletResponse response,

long userId)

throws IOException, ServletException {

try {

EventsProcessorUtil.process(

PropsKeys.SERVLET_SERVICE_EVENTS_PRE,

PropsValues.SERVLET_SERVICE_EVENTS_PRE, request, response);

}

catch (Exception e) {

Throwable cause = e.getCause();

if (cause instanceof NoSuchLayoutException) {

sendError(

HttpServletResponse.SC_NOT_FOUND, cause, request, response);

return true;

}

else if (cause instanceof PrincipalException) {

processServicePrePrincipalException(

cause, userId, request, response);

return true;

}

_log.error(e, e);

request.setAttribute(PageContext.EXCEPTION, e);

ServletContext servletContext = getServletContext();

StrutsUtil.forward(

PropsValues.SERVLET_SERVICE_EVENTS_PRE_ERROR_PAGE,

servletContext, request, response);

return true;

}

return false;

}

protected void processServicePrePrincipalException(

Throwable t, long userId, HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException {

if (userId > 0) {

sendError(

HttpServletResponse.SC_UNAUTHORIZED, t, request, response);

return;

}

String redirect =

request.getContextPath() + Portal.PATH_MAIN + "/portal/login";

String currentURL = PortalUtil.getCurrentURL(request);

redirect = HttpUtil.addParameter(redirect, "redirect", currentURL);

long plid = ParamUtil.getLong(request, "p_l_id");

if (plid > 0) {

try {

Layout layout = LayoutLocalServiceUtil.getLayout(plid);

if (layout.getGroup().isStagingGroup()) {

Group group = GroupLocalServiceUtil.getGroup(

layout.getCompanyId(), GroupConstants.GUEST);

plid = group.getDefaultPublicPlid();

}

else if (layout.isPrivateLayout()) {

plid = LayoutLocalServiceUtil.getDefaultPlid(

layout.getGroupId(), false);

}

redirect = HttpUtil.addParameter(redirect, "p_l_id", plid);

}

catch (Exception e) {

}

}

response.sendRedirect(redirect);

}

protected boolean processShutdownRequest(

HttpServletRequest request, HttpServletResponse response)

throws IOException {

if (!ShutdownUtil.isShutdown()) {

return false;

}

response.setContentType(ContentTypes.TEXT_HTML_UTF8);

String html = ContentUtil.get(

"com/liferay/portal/dependencies/shutdown.html");

response.getOutputStream().print(html);

return true;

}

protected void processStartupEvents() throws Exception {

StartupAction startupAction = new StartupAction();

startupAction.run(null);

}

protected HttpServletRequest protectRequest(

HttpServletRequest request, String remoteUser) {

// WebSphere will not return the remote user unless you are

// authenticated AND accessing a protected path. Other servers will

// return the remote user for all threads associated with an

// authenticated user. We use ProtectedServletRequest to ensure we get

// similar behavior across all servers.

return new ProtectedServletRequest(request, remoteUser);

}

protected void sendError(

int status, Throwable t, HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException {

DynamicServletRequest dynamicRequest = new DynamicServletRequest(

request);

// Reset p_l_id or there will be an infinite loop

dynamicRequest.setParameter("p_l_id", StringPool.BLANK);

PortalUtil.sendError(status, (Exception)t, dynamicRequest, response);

}

protected void setPortalPort(HttpServletRequest request) {

PortalUtil.setPortalPort(request);

}

protected void setPrincipalName(long userId, String remoteUser) {

if ((userId == 0) && (remoteUser == null)) {

return;

}

String name = String.valueOf(userId);

if (remoteUser != null) {

name = remoteUser;

}

PrincipalThreadLocal.setName(name);

}

private static final String _LIFERAY_PORTAL_REQUEST_HEADER =

"Liferay-Portal";

private static Log _log = LogFactoryUtil.getLog(MainServlet.class);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: