cmslogin.java
来自「找了很久才找到到源代码」· Java 代码 · 共 914 行 · 第 1/3 页
JAVA
914 行
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/workplace/CmsLogin.java,v $
* Date : $Date: 2007-08-19 05:56:19 $
* Version: $Revision: 1.29 $
*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) 2002 - 2007 Alkacon Software GmbH (http://www.alkacon.com)
*
* 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.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.workplace;
import org.opencms.db.CmsLoginMessage;
import org.opencms.db.CmsUserSettings;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsProject;
import org.opencms.file.CmsResourceFilter;
import org.opencms.i18n.CmsAcceptLanguageHeaderParser;
import org.opencms.i18n.CmsEncoder;
import org.opencms.i18n.CmsMessageContainer;
import org.opencms.jsp.CmsJspLoginBean;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsOrganizationalUnit;
import org.opencms.util.CmsRequestUtil;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUriSplitter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.PageContext;
import org.apache.commons.logging.Log;
/**
* Handles the login of Users to the OpenCms workplace.<p>
*
* @author Alexander Kandzior
*
* @version $Revision: 1.29 $
*
* @since 6.0.0
*/
public class CmsLogin extends CmsJspLoginBean {
/** Action constant: Default action, display the dialog. */
public static final int ACTION_DISPLAY = 0;
/** Action constant: Login sucessful. */
public static final int ACTION_LOGIN = 1;
/** Action constant: Logout. */
public static final int ACTION_LOGOUT = 2;
/** The parameter name for the "login" action. */
public static final String PARAM_ACTION_LOGIN = "login";
/** The parameter name for the "logout" action. */
public static final String PARAM_ACTION_LOGOUT = "logout";
/** The html id for the login form. */
public static final String PARAM_FORM = "ocLoginForm";
/** The parameter name for the organizational unit. */
public static final String PARAM_OUFQN = "ocOuFqn";
/** The parameter name for the password. */
public static final String PARAM_PASSWORD = "ocPword";
/** The parameter name for the organizational unit. */
public static final String PARAM_PREDEF_OUFQN = "ocPredefOuFqn";
/** The parameter name for the user name. */
public static final String PARAM_USERNAME = "ocUname";
/** The oufqn cookie name. */
private static final String COOKIE_OUFQN = "OpenCmsOuFqn";
/** The username cookie name. */
private static final String COOKIE_USERNAME = "OpenCmsUserName";
/** The log object for this class. */
private static final Log LOG = CmsLog.getLog(CmsLogin.class);
/** The action to perform. */
private int m_action;
/** The value of the "login" action parameter. */
private String m_actionLogin;
/** The value of the "logout" action parameter. */
private String m_actionLogout;
/** The locale to use for display, this will not be the workplace locale, but the browser locale. */
private Locale m_locale;
/** The message to display with the dialog in a JavaScrip alert. */
private CmsMessageContainer m_message;
/** The selected organizational unit. */
private CmsOrganizationalUnit m_ou;
/** The value of the organizational unit parameter. */
private String m_oufqn;
/** The list of all organizational units. */
private List m_ous;
/** The value of the password parameter. */
private String m_password;
/** The redirect URL after a successful login. */
private String m_requestedResource;
/** The value of the user name parameter. */
private String m_username;
/**
* Public constructor for login page.<p>
*
* @param context the JSP page context object
* @param req the JSP request
* @param res the JSP response
*/
public CmsLogin(PageContext context, HttpServletRequest req, HttpServletResponse res) {
super(context, req, res);
// this page must never be cached
res.setDateHeader(CmsRequestUtil.HEADER_LAST_MODIFIED, System.currentTimeMillis());
CmsRequestUtil.setNoCacheHeaders(res);
// divine the best locale from the users browser settings
CmsAcceptLanguageHeaderParser parser = new CmsAcceptLanguageHeaderParser(
req,
OpenCms.getWorkplaceManager().getDefaultLocale());
List acceptedLocales = parser.getAcceptedLocales();
List workplaceLocales = OpenCms.getWorkplaceManager().getLocales();
m_locale = OpenCms.getLocaleManager().getFirstMatchingLocale(acceptedLocales, workplaceLocales);
if (m_locale == null) {
// no match found - use OpenCms default locale
m_locale = OpenCms.getWorkplaceManager().getDefaultLocale();
}
}
/**
* Returns html code for selecting an organizational unit.<p>
*
* @return html code
*/
public String buildOrgUnitSelector() {
StringBuffer html = new StringBuffer();
html.append("<select style='width: 100%;' size='1' ");
appendId(html, PARAM_OUFQN);
html.append(">\n");
Iterator itOus = getOus().iterator();
while (itOus.hasNext()) {
CmsOrganizationalUnit ou = (CmsOrganizationalUnit)itOus.next();
String selected = "";
if (ou.getName().equals(m_oufqn)
|| (CmsStringUtil.isNotEmptyOrWhitespaceOnly(m_oufqn) && ou.getName().equals(m_oufqn.substring(1)))) {
selected = " selected='selected'";
}
html.append("<option value='").append(ou.getName()).append("'").append(selected).append(">");
html.append(ou.getDisplayName(m_locale));
html.append("</option>\n");
}
html.append("</select>\n");
return html.toString();
}
/**
* Returns the HTML for the login dialog in it's current state.<p>
*
* @return the HTML for the login dialog
*
* @throws IOException in case a redirect fails
*/
public String displayDialog() throws IOException {
if ((OpenCms.getSiteManager().getSites().size() > 1)
&& !OpenCms.getSiteManager().isWorkplaceRequest(getRequest())) {
// this is a multi site-configuration, but not a request to the configured Workplace site
StringBuffer loginLink = new StringBuffer();
loginLink.append(OpenCms.getSiteManager().getWorkplaceSiteMatcher().toString());
loginLink.append(getFormLink());
// send a redirect to the workplace site
getResponse().sendRedirect(loginLink.toString());
return null;
}
CmsObject cms = getCmsObject();
m_message = null;
if (cms.getRequestContext().currentUser().isGuestUser()) {
// user is not currently logged in
m_action = ACTION_DISPLAY;
m_username = CmsRequestUtil.getNotEmptyParameter(getRequest(), PARAM_USERNAME);
if (m_username != null) {
// remove white spaces, can only lead to confusion on user name
m_username = m_username.trim();
}
m_password = CmsRequestUtil.getNotEmptyParameter(getRequest(), PARAM_PASSWORD);
m_actionLogin = CmsRequestUtil.getNotEmptyParameter(getRequest(), PARAM_ACTION_LOGIN);
m_oufqn = getRequest().getParameter(PARAM_OUFQN);
if (m_oufqn == null) {
m_oufqn = (String)getRequest().getAttribute(PARAM_PREDEF_OUFQN);
}
// try to get some info from a cookie
getCookieData();
if (m_oufqn == null) {
m_oufqn = CmsOrganizationalUnit.SEPARATOR;
}
m_ou = null;
try {
m_ou = OpenCms.getOrgUnitManager().readOrganizationalUnit(getCmsObject(), m_oufqn);
} catch (CmsException e) {
m_oufqn = CmsOrganizationalUnit.SEPARATOR;
try {
m_ou = OpenCms.getOrgUnitManager().readOrganizationalUnit(getCmsObject(), m_oufqn);
} catch (CmsException exc) {
LOG.error(exc.getLocalizedMessage(), exc);
}
}
} else {
// user is already logged in
m_action = ACTION_LOGIN;
m_actionLogout = CmsRequestUtil.getNotEmptyParameter(getRequest(), PARAM_ACTION_LOGOUT);
}
m_requestedResource = CmsRequestUtil.getNotEmptyParameter(
getRequest(),
CmsWorkplaceManager.PARAM_LOGIN_REQUESTED_RESOURCE);
if (m_requestedResource == null) {
// no resource was requested, use default workplace URI
m_requestedResource = CmsFrameset.JSP_WORKPLACE_URI;
} else {
if (m_actionLogin != null) {
m_requestedResource = CmsEncoder.decode(m_requestedResource);
}
}
if (Boolean.valueOf(m_actionLogin).booleanValue()) {
// login was requested
if ((m_username == null) && (m_password == null)) {
m_message = Messages.get().container(Messages.GUI_LOGIN_NO_DATA_0);
} else if (m_username == null) {
m_message = Messages.get().container(Messages.GUI_LOGIN_NO_NAME_0);
} else if (m_password == null) {
m_message = Messages.get().container(Messages.GUI_LOGIN_NO_PASSWORD_0);
} else if ((m_username != null) && (m_password != null)) {
// try to login with the given user information
login((m_oufqn == null ? CmsOrganizationalUnit.SEPARATOR : m_oufqn) + m_username, m_password);
if (getLoginException() == null) {
// the login was successful
m_action = ACTION_LOGIN;
// set the default project of the user
CmsUserSettings settings = new CmsUserSettings(cms);
try {
CmsProject project = cms.readProject(settings.getStartProject());
if (cms.getAllAccessibleProjects().contains(project)) {
// user has access to the project, set this as current project
cms.getRequestContext().setCurrentProject(project);
}
} catch (CmsException e) {
// unable to set the startup project, bad but not critical
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?