在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用户线上无法进行读写操作的问题了。