diff --git a/src/main/assemblies/plugin.xml b/src/main/assemblies/plugin.xml
index b2ef90033616b8aa8da45ce60b25a227f461d694..8b6fa5943b997cca5d6a1638177b4e470488ece1 100644
--- a/src/main/assemblies/plugin.xml
+++ b/src/main/assemblies/plugin.xml
@@ -18,6 +18,11 @@
true
+
+
+
+ true
+
diff --git a/src/main/java/org/wltea/analyzer/dic/Dictionary.java b/src/main/java/org/wltea/analyzer/dic/Dictionary.java
index 4e077ce2c844129b12498e774bea40cc55878285..33105be6540ed2c1274aae3633b5410ec60d3d59 100644
--- a/src/main/java/org/wltea/analyzer/dic/Dictionary.java
+++ b/src/main/java/org/wltea/analyzer/dic/Dictionary.java
@@ -36,6 +36,8 @@ import java.nio.file.Files;
import java.nio.file.FileVisitResult;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -47,6 +49,7 @@ import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
+import org.elasticsearch.SpecialPermission;
import org.elasticsearch.common.io.PathUtils;
import org.elasticsearch.common.logging.ESLoggerFactory;
import org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin;
@@ -439,10 +442,17 @@ public class Dictionary {
}
+ private static List getRemoteWords(String location) {
+ SpecialPermission.check();
+ return AccessController.doPrivileged((PrivilegedAction>) () -> {
+ return getRemoteWordsUnprivileged(location);
+ });
+ }
+
/**
* 从远程服务器上下载自定义词条
*/
- private static List getRemoteWords(String location) {
+ private static List getRemoteWordsUnprivileged(String location) {
List buffer = new ArrayList();
RequestConfig rc = RequestConfig.custom().setConnectionRequestTimeout(10 * 1000).setConnectTimeout(10 * 1000)
diff --git a/src/main/java/org/wltea/analyzer/dic/Monitor.java b/src/main/java/org/wltea/analyzer/dic/Monitor.java
index fb5355c72c07deb653580373825526390b8c5819..f82064777e8cd8713ae9e0b9fcc20dd45af7183f 100644
--- a/src/main/java/org/wltea/analyzer/dic/Monitor.java
+++ b/src/main/java/org/wltea/analyzer/dic/Monitor.java
@@ -1,6 +1,8 @@
package org.wltea.analyzer.dic;
import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -8,6 +10,7 @@ import org.apache.http.client.methods.HttpHead;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.logging.log4j.Logger;
+import org.elasticsearch.SpecialPermission;
import org.elasticsearch.common.logging.ESLoggerFactory;
public class Monitor implements Runnable {
@@ -34,6 +37,15 @@ public class Monitor implements Runnable {
this.last_modified = null;
this.eTags = null;
}
+
+ public void run() {
+ SpecialPermission.check();
+ AccessController.doPrivileged((PrivilegedAction) () -> {
+ this.runUnprivileged();
+ return null;
+ });
+ }
+
/**
* 监控流程:
* ①向词库服务器发送Head请求
@@ -43,7 +55,7 @@ public class Monitor implements Runnable {
* ⑤休眠1min,返回第①步
*/
- public void run() {
+ public void runUnprivileged() {
//超时设置
RequestConfig rc = RequestConfig.custom().setConnectionRequestTimeout(10*1000)
diff --git a/src/main/resources/plugin-security.policy b/src/main/resources/plugin-security.policy
new file mode 100644
index 0000000000000000000000000000000000000000..55d759a3c15fd51e5f0da2b111413525bf7c06a2
--- /dev/null
+++ b/src/main/resources/plugin-security.policy
@@ -0,0 +1,4 @@
+grant {
+ // needed because of the hot reload functionality
+ permission java.net.SocketPermission "*", "connect,resolve";
+};
\ No newline at end of file