愁死人的权限问题:java.security.AccessControlException: access denied ("java.net.SocketPe

济南大飞哥 2017-12-24 09:02:18
开源软件elasticsearch的分词插件elasticsearch-analysis-ik可以通过配置一个url热更词,我在本地tomcat起了一个小工程,根目录下放了一个.dic文本文件,用浏览器http://127.0.0.1:8080/head/words.dic访问一切正常,能出来结果,但是elasticsearch跑起来就报错:

[2017-12-24T20:49:02,293][INFO ][o.w.a.d.Monitor ] [Dict Loading] http://127.0.0.1:8080/head/words.txt
[2017-12-24T20:49:02,605][WARN ][r.suppressed ] path: /_analyze//, params: {}
org.elasticsearch.transport.RemoteTransportException: [node-1][127.0.0.1:9300][indices:admin/analyze[s]]
Caused by: java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:8080" "connect,resolve")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) ~[?:1.8.0_91]
at java.security.AccessController.checkPermission(AccessController.java:884) ~[?:1.8.0_91]
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[?:1.8.0_91]
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) ~[?:1.8.0_91]
at java.net.Socket.connect(Socket.java:584) ~[?:1.8.0_91]
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:74) ~[?:?]
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141) ~[?:?]
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) ~[?:?]
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) ~[?:?]
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) ~[?:?]
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) ~[?:?]
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) ~[?:?]
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[?:?]
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) ~[?:?]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) ~[?:?]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) ~[?:?]
at org.wltea.analyzer.dic.Dictionary.getRemoteWords(Dictionary.java:470) ~[?:?]
at org.wltea.analyzer.dic.Dictionary.loadRemoteExtDict(Dictionary.java:439) ~[?:?]
at org.wltea.analyzer.dic.Dictionary.loadMainDict(Dictionary.java:380) ~[?:?]
at org.wltea.analyzer.dic.Dictionary.initial(Dictionary.java:151) ~[?:?]
at org.wltea.analyzer.cfg.Configuration.<init>(Configuration.java:40) ~[?:?]
at org.elasticsearch.index.analysis.IkAnalyzerProvider.<init>(IkAnalyzerProvider.java:15) ~[?:?]
at org.elasticsearch.index.analysis.IkAnalyzerProvider.getIkSmartAnalyzerProvider(IkAnalyzerProvider.java:21) ~[?:?]
at org.elasticsearch.indices.analysis.AnalysisModule$AnalysisProvider.get(AnalysisModule.java:351) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.index.analysis.AnalysisRegistry.lambda$getAnalyzer$0(AnalysisRegistry.java:131) ~[elasticsearch-6.1.1.jar:6.1.1]
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[?:1.8.0_91]
at org.elasticsearch.index.analysis.AnalysisRegistry.getAnalyzer(AnalysisRegistry.java:129) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.analyze(TransportAnalyzeAction.java:176) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:164) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:80) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.action.support.single.shard.TransportSingleShardAction$ShardTransportHandler.messageReceived(TransportSingleShardAction.java:294) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.action.support.single.shard.TransportSingleShardAction$ShardTransportHandler.messageReceived(TransportSingleShardAction.java:287) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:30) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:66) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:652) [elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:637) [elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-6.1.1.jar:6.1.1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_91]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]

我找到关键代码,其实就是个静态小方法,拷贝出来再eclipse里执行也正常,问题比较尴尬,到底需要设置什么权限?

copy出来的代码:


public class TT
{

public static void main(String[] args)
{
String location = "http://127.0.0.1:8080/head/words.dic";
List buffer = new ArrayList();

RequestConfig rc = RequestConfig.custom()
.setConnectionRequestTimeout(10000)
.setConnectTimeout(10000)
.setSocketTimeout(60000)
.build();
CloseableHttpClient httpclient = HttpClients.createDefault();

HttpGet get = new HttpGet(location);
get.setConfig(rc);
try
{
CloseableHttpResponse response = httpclient.execute(get);
if (response.getStatusLine().getStatusCode() == 200)
{
String charset = "UTF-8";

if (response.getEntity().getContentType().getValue().contains("charset="))
{
String contentType = response.getEntity().getContentType().getValue();
charset = contentType.substring(contentType.lastIndexOf("=") + 1);
}
BufferedReader in = new BufferedReader(
new InputStreamReader(response.getEntity().getContent(), charset));
String line;
while ((line = in.readLine()) != null)
{

buffer.add(line);
}
in.close();
response.close();

}
response.close();
}
catch (ClientProtocolException e)
{
System.out.println("getRemoteWords {} error" + new Object[] {e, location});
}
catch (IllegalStateException e)
{
System.out.println("getRemoteWords {} error" + new Object[] {e, location});
}
catch (IOException e)
{
System.out.println("getRemoteWords {} error" + new Object[] {e, location});
}

System.out.println(buffer);

}

}

...全文
816 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zz_i80 2018-10-15
  • 打赏
  • 举报
回复
楼主解决了吗?我现在也遇到这个问题了,不过我是用mysql热更新的方式,但是报错和你是一样的,求教

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧