OpenCms初始化一个CmsObject

在OpenCms使用过程中,有时候线上的Gest用户需要进行读写的操作,而此时的用户是没有权限进行读写操作的。此时,开发者可以进行初始化一个有权限的CmsObject进行读写操作。

此处提供一个解决方案:

在OpenCms中创建一个模块,然后为 Action class 属性配置上一个类。

public class CmsAdminObject extends A_CmsModuleAction {

	/** The cms context. */
	private static CmsObject m_cms;

	/**
	 * Returns the admin cms context.
	 * <p>
	 * 
	 * @return the admin cms context
	 */
	public static CmsObject getAdminCms() {

		return m_cms;
	}

	/**
	 * @see org.opencms.module.A_CmsModuleAction#initialize(org.opencms.file.CmsObject,
	 *      org.opencms.configuration.CmsConfigurationManager,
	 *      org.opencms.module.CmsModule)
	 */
	@Override
	public void initialize(CmsObject adminCms, CmsConfigurationManager configurationManager, CmsModule module) {

		super.initialize(adminCms, configurationManager, module);
		
		try {
			String user = module.getParameter("user", "Admin");
			String site = module.getParameter("site", "/sites/default/");
			String ouFqn = module.getParameter("oufqn", "/");
			String encoding = module.getParameter("encoding", "UTF-8");
			String project = module.getParameter("project", "Offline");
			
			CmsContextInfo cmsInfo = new CmsContextInfo();
			cmsInfo.setProjectName(project);
			cmsInfo.setSiteRoot(site);
			cmsInfo.setEncoding(encoding);
			cmsInfo.setUserName(ouFqn + user);
			cmsInfo.setLocale(Locale.CHINA);
			
			m_cms = OpenCms.initCmsObject(OpenCms.initCmsObject(adminCms), cmsInfo);
		} catch (CmsException e) {
			// initialization failed
			e.printStackTrace();
		}
	}
}

 

类中使用的模块参数可以进行配置。当OpenCms启动时,就会用模块中配置的参数创建一个CmsObject对象(模块参数中配置的用户应该有读写的权限),在JSP页面中需要进行读写操作时,

<%@page import="org.opencms.main.CmsContextInfo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,
				org.opencms.jsp.*,
				org.opencms.file.*,
				static CmsAdminObject.getAdminCms" 
%>
<%
	CmsObject cms = getAdminCms();
	cms.createResource("/text",1);
%>
 这样就可以解决Gest用户线上无法进行读写操作的问题了。

你可能感兴趣的:(OpenCMS)