Java 小程序 AccessControlException (apache httpclient)

标签 java applet self-signed apache-httpcomponents accesscontrolexception

我有以下 HttpGet() 函数:

    HttpGet request = new HttpGet(url);

    request.setHeader("User-Agent", userAgent);
    request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    request.setHeader("Accept-Language", "en-US,en;q=0.5");
    if (!cookies.equals(""))
        request.setHeader("Cookie", this.cookies);

    for (Map.Entry<String, String> header : tempHeaders.entrySet())
    {
        request.setHeader(header.getKey(), header.getValue());
    }
    tempHeaders.clear();

    HttpResponse response = client.execute(request);

该函数是封装 Apache HttpClient 的 Browser() 类的一部分。当我在小程序查看器中运行小程序时,一切正常。但是,当我将小程序嵌入到页面中时,出现以下异常:

java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:80" "connect,resolve")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkConnect(Unknown Source)
    at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
    at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:178)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
    **at vidinstant.HttpBrowser.Get(HttpBrowser.java:60)**
    at vidinstant.ServerThread$1.run(ServerThread.java:201)
    at vidinstant.ServerThread$1.run(ServerThread.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at vidinstant.ServerThread.GetLink(ServerThread.java:196)
    at vidinstant.ServerThread.run(ServerThread.java:95)

您可以看到异常的“来源”位于 Browser 类中的第 60 行,更准确地说,是上面代码摘录中的这一行:

  HttpResponse response = client.execute(request);

我已经对小程序 .jar 进行了自签名, list 文件中包含“权限:所有权限”行。

为什么会出现此异常以及访问被拒绝?在浏览器中运行该小程序的用户单击“允许”和“不阻止”,但它仍然不起作用。 Apache 的库 .jar 也必须签名吗?他们的 list 中是否需要拥有“所有权限”?如何获得运行此类功能的权限,而用户不必摆弄他们的 Java 策略文件?

最佳答案

Do Apache's library .jars have to be signed too?

是的。不允许“90%”安全。部署的代码要么被认为是安全的,要么是不安全的。

关于Java 小程序 AccessControlException (apache httpclient),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20588856/

相关文章:

java - 'sanitize' JTextField 输入的更清晰方法?

java - 为什么这个简单的java代码不能编译?

java - Java 小程序是否可以在线使用?

java - Jlist 未显示/出现在小程序中

windows - 如果自签名 CA 根证书导入到机器商店,我可以在没有测试模式的 64 位 Windows 上安装自签名驱动程序吗?

引用 vararg (String[]...) 时,Javadoc @link 不起作用

java - 数组索引越界 : index0

Java Applet 透明背景

iphone - 应用程序钥匙串(keychain)中带有自签名证书的 HTTPS

self-signed - 高级 Rest 客户端桌面应用程序自签名证书问题