fix #2061 add smb1

This commit is contained in:
Shinsuke Sugaya 2019-03-23 07:12:28 +09:00
parent 36c963c224
commit 617e765460
12 changed files with 112 additions and 22 deletions

View file

@ -252,7 +252,8 @@ public class AdminWizardAction extends FessAdminAction {
}
protected String convertCrawlingPath(final String path) {
if (path.startsWith("http:") || path.startsWith("https:") || path.startsWith("smb:") || path.startsWith("ftp:")) {
if (path.startsWith("http:") || path.startsWith("https:") || path.startsWith("smb:") || path.startsWith("smb1:")
|| path.startsWith("ftp:")) {
return path;
}

View file

@ -153,6 +153,6 @@ public class GoAction extends FessSearchAction {
}
protected boolean isFileSystemPath(final String url) {
return url.startsWith("file:") || url.startsWith("smb:") || url.startsWith("ftp:");
return url.startsWith("file:") || url.startsWith("smb:") || url.startsWith("smb1:") || url.startsWith("ftp:");
}
}

View file

@ -74,7 +74,7 @@ public class FessCrawlerThread extends CrawlerThread {
dataMap.put(fessConfig.getIndexFieldUrl(), url);
final List<String> roleTypeList = new ArrayList<>();
stream(crawlingConfig.getPermissions()).of(stream -> stream.forEach(p -> roleTypeList.add(p)));
if (url.startsWith("smb:") || url.startsWith("file:") || url.startsWith("ftp:")) {
if (url.startsWith("smb:") || url.startsWith("smb1:") || url.startsWith("file:") || url.startsWith("ftp:")) {
if (url.endsWith("/")) {
// directory
return true;

View file

@ -203,6 +203,7 @@ public class DataConfig extends BsDataConfig implements CrawlingConfig {
if (StringUtil.isNotBlank(fileAuthStr)) {
final String[] fileAuthNames = fileAuthStr.split(",");
final List<SmbAuthentication> smbAuthList = new ArrayList<>();
final List<org.codelibs.fess.crawler.client.smb1.SmbAuthentication> smb1AuthList = new ArrayList<>();
final List<FtpAuthentication> ftpAuthList = new ArrayList<>();
for (final String fileAuthName : fileAuthNames) {
final String scheme = paramMap.get(CRAWLER_FILE_AUTH + "." + fileAuthName + ".scheme");
@ -231,6 +232,21 @@ public class DataConfig extends BsDataConfig implements CrawlingConfig {
smbAuth.setUsername(username);
smbAuth.setPassword(password == null ? StringUtil.EMPTY : password);
smbAuthList.add(smbAuth);
final org.codelibs.fess.crawler.client.smb1.SmbAuthentication smb1Auth =
new org.codelibs.fess.crawler.client.smb1.SmbAuthentication();
smb1Auth.setDomain(domain == null ? StringUtil.EMPTY : domain);
smb1Auth.setServer(hostname);
if (StringUtil.isNotBlank(port)) {
try {
smb1Auth.setPort(Integer.parseInt(port));
} catch (final NumberFormatException e) {
logger.warn("Failed to parse " + port, e);
}
}
smb1Auth.setUsername(username);
smb1Auth.setPassword(password == null ? StringUtil.EMPTY : password);
smb1AuthList.add(smb1Auth);
} else if (Constants.FTP.equals(scheme)) {
final String hostname = paramMap.get(CRAWLER_FILE_AUTH + "." + fileAuthName + ".host");
final String port = paramMap.get(CRAWLER_FILE_AUTH + "." + fileAuthName + ".port");
@ -259,6 +275,10 @@ public class DataConfig extends BsDataConfig implements CrawlingConfig {
if (!smbAuthList.isEmpty()) {
factoryParamMap.put(SmbClient.SMB_AUTHENTICATIONS_PROPERTY, smbAuthList.toArray(new SmbAuthentication[smbAuthList.size()]));
}
if (!smb1AuthList.isEmpty()) {
factoryParamMap.put(org.codelibs.fess.crawler.client.smb1.SmbClient.SMB_AUTHENTICATIONS_PROPERTY,
smb1AuthList.toArray(new org.codelibs.fess.crawler.client.smb1.SmbAuthentication[smb1AuthList.size()]));
}
if (!ftpAuthList.isEmpty()) {
factoryParamMap.put(FtpClient.FTP_AUTHENTICATIONS_PROPERTY, ftpAuthList.toArray(new FtpAuthentication[ftpAuthList.size()]));
}

View file

@ -159,6 +159,7 @@ public class FileConfig extends BsFileConfig implements CrawlingConfig {
// auth params
final List<FileAuthentication> fileAuthList = fileAuthenticationService.getFileAuthenticationList(getId());
final List<SmbAuthentication> smbAuthList = new ArrayList<>();
final List<org.codelibs.fess.crawler.client.smb1.SmbAuthentication> smb1AuthList = new ArrayList<>();
final List<FtpAuthentication> ftpAuthList = new ArrayList<>();
for (final FileAuthentication fileAuth : fileAuthList) {
if (Constants.SAMBA.equals(fileAuth.getProtocolScheme())) {
@ -171,6 +172,15 @@ public class FileConfig extends BsFileConfig implements CrawlingConfig {
smbAuth.setUsername(fileAuth.getUsername());
smbAuth.setPassword(fileAuth.getPassword());
smbAuthList.add(smbAuth);
final org.codelibs.fess.crawler.client.smb1.SmbAuthentication smb1Auth =
new org.codelibs.fess.crawler.client.smb1.SmbAuthentication();
smb1Auth.setDomain(domain == null ? StringUtil.EMPTY : domain);
smb1Auth.setServer(fileAuth.getHostname());
smb1Auth.setPort(fileAuth.getPort() == null ? -1 : fileAuth.getPort().intValue());
smb1Auth.setUsername(fileAuth.getUsername());
smb1Auth.setPassword(fileAuth.getPassword());
smb1AuthList.add(smb1Auth);
} else if (Constants.FTP.equals(fileAuth.getProtocolScheme())) {
final FtpAuthentication ftpAuth = new FtpAuthentication();
ftpAuth.setServer(fileAuth.getHostname());
@ -181,6 +191,8 @@ public class FileConfig extends BsFileConfig implements CrawlingConfig {
}
}
paramMap.put(SmbClient.SMB_AUTHENTICATIONS_PROPERTY, smbAuthList.toArray(new SmbAuthentication[smbAuthList.size()]));
paramMap.put(org.codelibs.fess.crawler.client.smb1.SmbClient.SMB_AUTHENTICATIONS_PROPERTY,
smb1AuthList.toArray(new org.codelibs.fess.crawler.client.smb1.SmbAuthentication[smb1AuthList.size()]));
paramMap.put(FtpClient.FTP_AUTHENTICATIONS_PROPERTY, ftpAuthList.toArray(new FtpAuthentication[ftpAuthList.size()]));
return paramMap;

View file

@ -35,6 +35,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jcifs.SID;
import jcifs.smb1.smb1.ACE;
public class PermissionHelper {
private static final Logger logger = LoggerFactory.getLogger(PermissionHelper.class);
@ -109,18 +110,37 @@ public class PermissionHelper {
public List<String> getSmbRoleTypeList(final ResponseData responseData) {
final List<String> roleTypeList = new ArrayList<>();
final FessConfig fessConfig = ComponentUtil.getFessConfig();
if (fessConfig.isSmbRoleFromFile() && responseData.getUrl().startsWith("smb:")) {
final SambaHelper sambaHelper = ComponentUtil.getSambaHelper();
final SID[] sids = (SID[]) responseData.getMetaDataMap().get(SmbClient.SMB_ALLOWED_SID_ENTRIES);
if (sids != null) {
for (final SID sid : sids) {
final String accountId = sambaHelper.getAccountId(sid);
if (accountId != null) {
roleTypeList.add(accountId);
if (fessConfig.isSmbRoleFromFile()) {
if (responseData.getUrl().startsWith("smb:")) {
final SambaHelper sambaHelper = ComponentUtil.getSambaHelper();
final SID[] sids = (SID[]) responseData.getMetaDataMap().get(SmbClient.SMB_ALLOWED_SID_ENTRIES);
if (sids != null) {
for (final SID sid : sids) {
final String accountId = sambaHelper.getAccountId(sid);
if (accountId != null) {
roleTypeList.add(accountId);
}
}
if (logger.isDebugEnabled()) {
logger.debug("smbUrl:" + responseData.getUrl() + " roleType:" + roleTypeList.toString());
}
}
if (logger.isDebugEnabled()) {
logger.debug("smbUrl:" + responseData.getUrl() + " roleType:" + roleTypeList.toString());
} else if (responseData.getUrl().startsWith("smb1:")) {
final SambaHelper sambaHelper = ComponentUtil.getSambaHelper();
final ACE[] aces =
(ACE[]) responseData.getMetaDataMap().get(
org.codelibs.fess.crawler.client.smb1.SmbClient.SMB_ACCESS_CONTROL_ENTRIES);
if (aces != null) {
for (final ACE item : aces) {
final jcifs.smb1.smb1.SID sid = item.getSID();
final String accountId = sambaHelper.getAccountId(sid);
if (accountId != null) {
roleTypeList.add(accountId);
}
}
if (logger.isDebugEnabled()) {
logger.debug("smbUrl:" + responseData.getUrl() + " roleType:" + roleTypeList.toString());
}
}
}
}

View file

@ -71,6 +71,24 @@ public class SambaHelper {
return null;
}
public String getAccountId(final jcifs.smb1.smb1.SID sid) {
final int type = sid.getType();
if (logger.isDebugEnabled()) {
try {
logger.debug("Processing SID: {} {} {}", type, sid, sid.toDisplayString());
} catch (Exception e) {
// ignore
}
}
final Integer id = fessConfig.getAvailableSmbSidType(type);
if (id != null) {
return createSearchRole(id, sid.getAccountName());
} else if (logger.isDebugEnabled()) {
logger.debug("Ignored SID: {} {}", type, sid);
}
return null;
}
protected String createSearchRole(final int type, final String name) {
return type + fessConfig.getCanonicalLdapName(name);
}

View file

@ -267,7 +267,7 @@ public class ViewHelper {
return "#not-found-" + DocumentUtil.getValue(document, fessConfig.getIndexFieldDocId(), String.class);
}
final boolean isSmbUrl = url.startsWith("smb:");
final boolean isSmbUrl = url.startsWith("smb:") || url.startsWith("smb1:");
final boolean isFtpUrl = url.startsWith("ftp:");
final boolean isSmbOrFtpUrl = isSmbUrl || isFtpUrl;
@ -278,6 +278,7 @@ public class ViewHelper {
if (isSmbUrl) {
url = url.replace("smb:", "file:");
url = url.replace("smb1:", "file:");
}
if (isHttpUrl && isSmbOrFtpUrl) {

View file

@ -58,6 +58,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
-Djcifs.smb.client.soTimeout=35000
-Djcifs.smb.client.connTimeout=60000
-Djcifs.smb.client.sessionTimeout=60000
-Djcifs.smb1.smb.client.connTimeout=60000
-Djcifs.smb1.smb.client.soTimeout=35000
-Djcifs.smb1.smb.client.responseTimeout=30000
-Dgroovy.use.classvalue=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
@ -115,6 +118,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
-Djcifs.smb.client.soTimeout=35000
-Djcifs.smb.client.connTimeout=60000
-Djcifs.smb.client.sessionTimeout=60000
-Djcifs.smb1.smb.client.connTimeout=60000
-Djcifs.smb1.smb.client.soTimeout=35000
-Djcifs.smb1.smb.client.responseTimeout=30000
-Dgroovy.use.classvalue=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
@ -265,7 +271,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/** The key of the configuration. e.g. http,https */
String CRAWLER_WEB_PROTOCOLS = "crawler.web.protocols";
/** The key of the configuration. e.g. file,smb,ftp */
/** The key of the configuration. e.g. file,smb,smb1,ftp */
String CRAWLER_FILE_PROTOCOLS = "crawler.file.protocols";
/** The key of the configuration. e.g. false */
@ -1474,6 +1480,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
-Djcifs.smb.client.soTimeout=35000
-Djcifs.smb.client.connTimeout=60000
-Djcifs.smb.client.sessionTimeout=60000
-Djcifs.smb1.smb.client.connTimeout=60000
-Djcifs.smb1.smb.client.soTimeout=35000
-Djcifs.smb1.smb.client.responseTimeout=30000
-Dgroovy.use.classvalue=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
@ -1540,6 +1549,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
-Djcifs.smb.client.soTimeout=35000
-Djcifs.smb.client.connTimeout=60000
-Djcifs.smb.client.sessionTimeout=60000
-Djcifs.smb1.smb.client.connTimeout=60000
-Djcifs.smb1.smb.client.soTimeout=35000
-Djcifs.smb1.smb.client.responseTimeout=30000
-Dgroovy.use.classvalue=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
@ -2066,7 +2078,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/**
* Get the value for the key 'crawler.file.protocols'. <br>
* The value is, e.g. file,smb,ftp <br>
* The value is, e.g. file,smb,smb1,ftp <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getCrawlerFileProtocols();
@ -8197,13 +8209,13 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
defaultMap.put(FessConfig.APP_DIGEST_ALGORISM, "sha256");
defaultMap
.put(FessConfig.JVM_CRAWLER_OPTIONS,
"-Djava.awt.headless=true\n-Dfile.encoding=UTF-8\n-Djna.nosys=true\n-Djdk.io.permissionsUseCanonicalPath=true\n-Dhttp.maxConnections=20\n-server\n-Xmx512m\n-XX:MaxMetaspaceSize=128m\n-XX:CompressedClassSpaceSize=32m\n-XX:-UseGCOverheadLimit\n-XX:+UseConcMarkSweepGC\n-XX:CMSInitiatingOccupancyFraction=75\n-XX:+UseCMSInitiatingOccupancyOnly\n-XX:+UseTLAB\n-XX:+DisableExplicitGC\n-XX:+HeapDumpOnOutOfMemoryError\n-XX:-OmitStackTraceInFastThrow\n-Djcifs.smb.client.responseTimeout=30000\n-Djcifs.smb.client.soTimeout=35000\n-Djcifs.smb.client.connTimeout=60000\n-Djcifs.smb.client.sessionTimeout=60000\n-Dgroovy.use.classvalue=true\n-Dio.netty.noUnsafe=true\n-Dio.netty.noKeySetOptimization=true\n-Dio.netty.recycler.maxCapacityPerThread=0\n-Dlog4j.shutdownHookEnabled=false\n-Dlog4j2.disable.jmx=true\n-Dlog4j.skipJansi=true\n-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider\n-Dorg.apache.pdfbox.rendering.UsePureJavaCMYKConversion=true\n");
"-Djava.awt.headless=true\n-Dfile.encoding=UTF-8\n-Djna.nosys=true\n-Djdk.io.permissionsUseCanonicalPath=true\n-Dhttp.maxConnections=20\n-server\n-Xmx512m\n-XX:MaxMetaspaceSize=128m\n-XX:CompressedClassSpaceSize=32m\n-XX:-UseGCOverheadLimit\n-XX:+UseConcMarkSweepGC\n-XX:CMSInitiatingOccupancyFraction=75\n-XX:+UseCMSInitiatingOccupancyOnly\n-XX:+UseTLAB\n-XX:+DisableExplicitGC\n-XX:+HeapDumpOnOutOfMemoryError\n-XX:-OmitStackTraceInFastThrow\n-Djcifs.smb.client.responseTimeout=30000\n-Djcifs.smb.client.soTimeout=35000\n-Djcifs.smb.client.connTimeout=60000\n-Djcifs.smb.client.sessionTimeout=60000\n-Djcifs.smb1.smb.client.connTimeout=60000\n-Djcifs.smb1.smb.client.soTimeout=35000\n-Djcifs.smb1.smb.client.responseTimeout=30000\n-Dgroovy.use.classvalue=true\n-Dio.netty.noUnsafe=true\n-Dio.netty.noKeySetOptimization=true\n-Dio.netty.recycler.maxCapacityPerThread=0\n-Dlog4j.shutdownHookEnabled=false\n-Dlog4j2.disable.jmx=true\n-Dlog4j.skipJansi=true\n-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider\n-Dorg.apache.pdfbox.rendering.UsePureJavaCMYKConversion=true\n");
defaultMap
.put(FessConfig.JVM_SUGGEST_OPTIONS,
"-Djava.awt.headless=true\n-Dfile.encoding=UTF-8\n-Djna.nosys=true\n-Djdk.io.permissionsUseCanonicalPath=true\n-server\n-Xmx256m\n-XX:MaxMetaspaceSize=128m\n-XX:CompressedClassSpaceSize=32m\n-XX:-UseGCOverheadLimit\n-XX:+UseConcMarkSweepGC\n-XX:CMSInitiatingOccupancyFraction=75\n-XX:+UseCMSInitiatingOccupancyOnly\n-XX:+UseTLAB\n-XX:+DisableExplicitGC\n-XX:+HeapDumpOnOutOfMemoryError\n-Dgroovy.use.classvalue=true\n-Dio.netty.noUnsafe=true\n-Dio.netty.noKeySetOptimization=true\n-Dio.netty.recycler.maxCapacityPerThread=0\n-Dlog4j.shutdownHookEnabled=false\n-Dlog4j2.disable.jmx=true\n-Dlog4j.skipJansi=true\n");
defaultMap
.put(FessConfig.JVM_THUMBNAIL_OPTIONS,
"-Djava.awt.headless=true\n-Dfile.encoding=UTF-8\n-Djna.nosys=true\n-Djdk.io.permissionsUseCanonicalPath=true\n-server\n-Xmx128m\n-XX:MaxMetaspaceSize=128m\n-XX:CompressedClassSpaceSize=32m\n-XX:-UseGCOverheadLimit\n-XX:+UseConcMarkSweepGC\n-XX:CMSInitiatingOccupancyFraction=75\n-XX:+UseCMSInitiatingOccupancyOnly\n-XX:+UseTLAB\n-XX:+DisableExplicitGC\n-XX:+HeapDumpOnOutOfMemoryError\n-XX:-OmitStackTraceInFastThrow\n-Djcifs.smb.client.responseTimeout=30000\n-Djcifs.smb.client.soTimeout=35000\n-Djcifs.smb.client.connTimeout=60000\n-Djcifs.smb.client.sessionTimeout=60000\n-Dgroovy.use.classvalue=true\n-Dio.netty.noUnsafe=true\n-Dio.netty.noKeySetOptimization=true\n-Dio.netty.recycler.maxCapacityPerThread=0\n-Dlog4j.shutdownHookEnabled=false\n-Dlog4j2.disable.jmx=true\n-Dlog4j.skipJansi=true\n-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider\n-Dorg.apache.pdfbox.rendering.UsePureJavaCMYKConversion=true\n");
"-Djava.awt.headless=true\n-Dfile.encoding=UTF-8\n-Djna.nosys=true\n-Djdk.io.permissionsUseCanonicalPath=true\n-server\n-Xmx128m\n-XX:MaxMetaspaceSize=128m\n-XX:CompressedClassSpaceSize=32m\n-XX:-UseGCOverheadLimit\n-XX:+UseConcMarkSweepGC\n-XX:CMSInitiatingOccupancyFraction=75\n-XX:+UseCMSInitiatingOccupancyOnly\n-XX:+UseTLAB\n-XX:+DisableExplicitGC\n-XX:+HeapDumpOnOutOfMemoryError\n-XX:-OmitStackTraceInFastThrow\n-Djcifs.smb.client.responseTimeout=30000\n-Djcifs.smb.client.soTimeout=35000\n-Djcifs.smb.client.connTimeout=60000\n-Djcifs.smb.client.sessionTimeout=60000\n-Djcifs.smb1.smb.client.connTimeout=60000\n-Djcifs.smb1.smb.client.soTimeout=35000\n-Djcifs.smb1.smb.client.responseTimeout=30000\n-Dgroovy.use.classvalue=true\n-Dio.netty.noUnsafe=true\n-Dio.netty.noKeySetOptimization=true\n-Dio.netty.recycler.maxCapacityPerThread=0\n-Dlog4j.shutdownHookEnabled=false\n-Dlog4j2.disable.jmx=true\n-Dlog4j.skipJansi=true\n-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider\n-Dorg.apache.pdfbox.rendering.UsePureJavaCMYKConversion=true\n");
defaultMap.put(FessConfig.JOB_SYSTEM_JOB_IDS, "default_crawler");
defaultMap.put(FessConfig.JOB_TEMPLATE_TITLE_WEB, "Web Crawler - {0}");
defaultMap.put(FessConfig.JOB_TEMPLATE_TITLE_FILE, "File Crawler - {0}");
@ -8256,7 +8268,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
defaultMap.put(FessConfig.CRAWLER_DOCUMENT_FULLSTOP_CHARS, "u002eu06d4u2e3cu3002");
defaultMap.put(FessConfig.CRAWLER_CRAWLING_DATA_ENCODING, "UTF-8");
defaultMap.put(FessConfig.CRAWLER_WEB_PROTOCOLS, "http,https");
defaultMap.put(FessConfig.CRAWLER_FILE_PROTOCOLS, "file,smb,ftp");
defaultMap.put(FessConfig.CRAWLER_FILE_PROTOCOLS, "file,smb,smb1,ftp");
defaultMap.put(FessConfig.CRAWLER_IGNORE_ROBOTS_TXT, "false");
defaultMap.put(FessConfig.CRAWLER_IGNORE_ROBOTS_TAGS, "false");
defaultMap.put(FessConfig.CRAWLER_IGNORE_CONTENT_EXCEPTION, "true");

View file

@ -70,7 +70,7 @@ public class GsaConfigParser extends DefaultHandler {
protected String[] webProtocols = new String[] { "http:", "https:" };
protected String[] fileProtocols = new String[] { "file:", "smb:" };
protected String[] fileProtocols = new String[] { "file:", "smb:", "smb1:", "ftp:" };
protected LinkedList<String> tagQueue;

View file

@ -97,7 +97,7 @@
<property name="allRequired">true</property>
<postConstruct name="addRule">
<arg>"url"</arg>
<arg>"(file|smb|ftp):.*"</arg>
<arg>"(file|smb|smb1|ftp):.*"</arg>
</postConstruct>
<postConstruct name="addRule">
<arg>"mimeType"</arg>

View file

@ -39,6 +39,9 @@ jvm.crawler.options=\
-Djcifs.smb.client.soTimeout=35000\n\
-Djcifs.smb.client.connTimeout=60000\n\
-Djcifs.smb.client.sessionTimeout=60000\n\
-Djcifs.smb1.smb.client.connTimeout=60000\n\
-Djcifs.smb1.smb.client.soTimeout=35000\n\
-Djcifs.smb1.smb.client.responseTimeout=30000\n\
-Dgroovy.use.classvalue=true\n\
-Dio.netty.noUnsafe=true\n\
-Dio.netty.noKeySetOptimization=true\n\
@ -96,6 +99,9 @@ jvm.thumbnail.options=\
-Djcifs.smb.client.soTimeout=35000\n\
-Djcifs.smb.client.connTimeout=60000\n\
-Djcifs.smb.client.sessionTimeout=60000\n\
-Djcifs.smb1.smb.client.connTimeout=60000\n\
-Djcifs.smb1.smb.client.soTimeout=35000\n\
-Djcifs.smb1.smb.client.responseTimeout=30000\n\
-Dgroovy.use.classvalue=true\n\
-Dio.netty.noUnsafe=true\n\
-Dio.netty.noKeySetOptimization=true\n\
@ -167,7 +173,7 @@ crawler.document.space.chars=u0009u000Au000Bu000Cu000Du001Cu001Du001Eu001Fu0020u
crawler.document.fullstop.chars=u002eu06d4u2e3cu3002
crawler.crawling.data.encoding=UTF-8
crawler.web.protocols=http,https
crawler.file.protocols=file,smb,ftp
crawler.file.protocols=file,smb,smb1,ftp
crawler.ignore.robots.txt=false
crawler.ignore.robots.tags=false
crawler.ignore.content.exception=true