📄 cmsstaticexportmanager.java
字号:
Messages.INIT_EXPORT_OPTIMIZATION_1,
getPlainExportOptimization()));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_EXPORT_TESTRESOURCE_1, getTestResource()));
} else {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_STATIC_EXPORT_DISABLED_0));
}
}
}
/**
* Checks if the static export is required for the given VFS resource.<p>
*
* Please note that the given OpenCms user context is NOT used to read the resource.
* The check for export is always done with the permissions of the "Export" user.
* The provided user context is just used to get the current site root.<p>
*
* Since the "Export" user always operates in the "Online" project, the resource
* is also read from the "Online" project, not from the current project of the given
* OpenCms context.<p>
*
* @param cms the current users OpenCms context
* @param vfsName the VFS resource name to check
*
* @return <code>true</code> if static export is required for the given VFS resource
*/
public boolean isExportLink(CmsObject cms, String vfsName) {
boolean result = false;
if (isStaticExportEnabled()) {
Boolean exportResource = (Boolean)m_cacheExportLinks.get(getCacheKey(
cms.getRequestContext().getSiteRoot(),
vfsName));
if (exportResource == null) {
try {
// static export must always be checked with the export users permissions,
// not the current users permissions
CmsObject exportCms = OpenCms.initCmsObject(OpenCms.getDefaultUsers().getUserExport());
exportCms.getRequestContext().setSiteRoot(cms.getRequestContext().getSiteRoot());
// let's look up export property in VFS
String exportValue = exportCms.readPropertyObject(
vfsName,
CmsPropertyDefinition.PROPERTY_EXPORT,
true).getValue();
if (exportValue == null) {
// no setting found for "export" property
if (getExportPropertyDefault()) {
// if the default is "true" we always export
result = true;
} else {
// check if the resource is exportable by suffix
result = isSuffixExportable(vfsName);
}
} else {
// "export" value found, if it was "true" we export
result = Boolean.valueOf(exportValue).booleanValue();
}
} catch (Exception e) {
// no export required (probably security issues, e.g. no access for export user)
}
m_cacheExportLinks.put(getCacheKey(cms.getRequestContext().getSiteRoot(), vfsName), new Boolean(result));
} else {
result = exportResource.booleanValue();
}
}
return result;
}
/**
* Returns <code>true</code> if the given VFS resource should be transported through a secure channel.<p>
*
* The secure mode is only checked in the "Online" project.
* If the given OpenCms context is currently not in the "Online" project,
* <code>false</code> is returned.<p>
*
* The given resource is read from the site root of the provided OpenCms context.<p>
*
* @param cms the current users OpenCms context
* @param vfsName the VFS resource name to check
*
* @return <code>true</code> if the given VFS resource should be transported through a secure channel
*
* @see #isSecureLink(CmsObject, String, String)
*/
public boolean isSecureLink(CmsObject cms, String vfsName) {
if (!cms.getRequestContext().currentProject().isOnlineProject()) {
return false;
}
Boolean secureResource = (Boolean)m_cacheSecureLinks.get(getCacheKey(
cms.getRequestContext().getSiteRoot(),
vfsName));
if (secureResource == null) {
try {
String secureProp = cms.readPropertyObject(vfsName, CmsPropertyDefinition.PROPERTY_SECURE, true).getValue();
secureResource = Boolean.valueOf(secureProp);
// only cache result if read was successfull
m_cacheSecureLinks.put(getCacheKey(cms.getRequestContext().getSiteRoot(), vfsName), secureResource);
} catch (CmsVfsResourceNotFoundException e) {
secureResource = Boolean.FALSE;
// resource does not exist, no secure link will be required for any user
m_cacheSecureLinks.put(getCacheKey(cms.getRequestContext().getSiteRoot(), vfsName), secureResource);
} catch (Exception e) {
// no secure link required (probably security issues, e.g. no access for current user)
// however other users may be allowed to read the resource, so the result can't be cached
secureResource = Boolean.FALSE;
}
}
return secureResource.booleanValue();
}
/**
* Returns <code>true</code> if the given VFS resource that is located under the
* given site root should be transported through a secure channel.<p>
*
* @param cms the current users OpenCms context
* @param vfsName the VFS resource name to check
* @param siteRoot the site root where the the VFS resource should be read
*
* @return <code>true</code> if the given VFS resource should be transported through a secure channel
*
* @see #isSecureLink(CmsObject, String)
*/
public boolean isSecureLink(CmsObject cms, String vfsName, String siteRoot) {
if (siteRoot == null) {
return isSecureLink(cms, vfsName);
}
// the site root of the cms object has to be changed so that the property can be read
try {
cms.getRequestContext().saveSiteRoot();
cms.getRequestContext().setSiteRoot(siteRoot);
return isSecureLink(cms, vfsName);
} finally {
cms.getRequestContext().restoreSiteRoot();
}
}
/**
* Returns true if the static export is enabled.<p>
*
* @return true if the static export is enabled
*/
public boolean isStaticExportEnabled() {
return m_staticExportEnabled;
}
/**
* Returns true if the given resource name is exportable because of it's suffix.<p>
*
* @param resourceName the name to check
* @return true if the given resource name is exportable because of it's suffix
*/
public boolean isSuffixExportable(String resourceName) {
if (resourceName == null) {
return false;
}
int pos = resourceName.lastIndexOf('.');
if (pos >= 0) {
String suffix = resourceName.substring(pos).toLowerCase();
return m_exportSuffixes.contains(suffix);
}
return false;
}
/**
* Returns true if the links in the static export should be relative.<p>
*
* @param vfsName the name of the resource to export
*
* @return true if the links in the static export should be relative
*/
public boolean relativeLinksInExport(String vfsName) {
if (vfsName != null) {
Iterator it = m_rfsRules.iterator();
while (it.hasNext()) {
CmsStaticExportRfsRule rule = (CmsStaticExportRfsRule)it.next();
if (rule.getSource().matcher(vfsName).matches()) {
return rule.getUseRelativeLinks() != null ? rule.getUseRelativeLinks().booleanValue()
: m_exportRelativeLinks;
}
}
}
return m_exportRelativeLinks;
}
/**
* Sets the accept-charset header value.<p>
*
* @param value accept-language header value
*/
public void setAcceptCharsetHeader(String value) {
m_acceptCharsetHeader = value;
}
/**
* Sets the accept-language header value.<p>
*
* @param value accept-language header value
*/
public void setAcceptLanguageHeader(String value) {
m_acceptLanguageHeader = value;
}
/**
* Sets the default property value.<p>
*
* @param value must be <code>"true"</code> or <code>"false"</code>
*/
public void setDefault(String value) {
m_exportPropertyDefault = Boolean.valueOf(value).booleanValue();
}
/**
* Sets the export enbled value.<p>
*
* @param value must be <code>"true"</code> or <code>"false"</code>
*/
public void setExportEnabled(String value) {
m_staticExportEnabled = Boolean.valueOf(value).booleanValue();
}
/**
* Adds a resource pattern to the list of resouces which are part of the export.<p>
*
* @param folder the folder pattern to add to the list.
*/
public void setExportFolderPattern(String folder) {
m_exportFolders.add(folder);
}
/**
* Sets specific http header for the static export.<p>
*
* The format of the headers must be "header:value".<p>
*
* @param exportHeader a specific http header
*/
public void setExportHeader(String exportHeader) {
if (CmsStringUtil.splitAsArray(exportHeader, ':').length == 2) {
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_EXPORT_HEADERS_1, exportHeader));
}
m_exportHeaders.add(exportHeader);
} else {
if (CmsLog.INIT.isWarnEnabled()) {
CmsLog.INIT.warn(Messages.get().getBundle().key(Messages.INIT_INVALID_HEADER_1, exportHeader));
}
}
}
/**
* Sets the path where the static export is written.<p>
*
* @param path the path where the static export is written
*/
public void setExportPath(String path) {
m_staticExportPathConfigured = path;
}
/**
* Adds a suffix to the list of resouce suffixes which will be exported by default.<p>
*
* @param suffix the suffix to add to the list.
*/
public void setExportSuffix(String suffix) {
m_exportSuffixes.add(suffix.toLowerCase());
}
/**
* Sets the export url.<p>
*
* @param url the export url
*/
public void setExportUrl(String url) {
m_exportUrl = insertContextStrings(url);
m_exportUrlConfigured = url;
}
/**
* Sets the static export handler class.<p>
*
* @param handlerClassName the static export handler class name.
*/
public void setHandler(String handlerClassName) {
try {
m_handler = (I_CmsStaticExportHandler)Class.forName(handlerClassName).newInstance();
} catch (Exception e) {
// should never happen
LOG.error(e);
}
}
/**
* Sets the plain export optimization value.<p>
*
* @param value must be <code>"true"</code> or <code>"false"</code>
*/
public void setPlainExportOptimization(String value) {
m_quickPlainExport = Boolean.valueOf(value).booleanValue();
}
/**
* Sets the relative links value.<p>
*
* @param value must be <code>"true"</code> or <code>"false"</code>
*/
public void setRelativeLinks(String value) {
m_exportRelativeLinks = Boolean.valueOf(value).booleanValue();
}
/**
* Sets the remote addr. wirch will be used for internal requests during the static export.<p>
*
* @param addr the remote addr. to be used
*/
public void setRemoteAddr(String addr) {
m_remoteAddr = addr;
}
/**
* Sets the
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -