【问题标题】:How to avoid java.security.AccessControlException through jtwitter (twitter API) from java applet如何通过 java applet 中的 jtwitter(twitter API)避免 java.security.AccessControlException
【发布时间】:2011-01-10 00:12:57
【问题描述】:

我正在编写一个简单的小程序(我的第一个小程序)来从 twitter 帐户中检索最新状态。当从 Eclipse 中启动的 javaw.exe 运行时,这可以正常工作。但是,从浏览器运行时出现错误:

java.security.AccessControlException:访问被拒绝(java.net.SocketPermission twitter.com:80 连接,解决)

关于如何避免这种情况的任何建议?

来电:

private void updateStatus() {
    try {
        Twitter client = new Twitter("user", "pw");
        Status status = client.getStatus();
        addItem(status.toString());
    }
    catch (Throwable t) {
        addItem(t.getMessage());
    }
}

与客户端的连接成功。引发异常的是 getStatus() 调用。我注意到 Eclipse 将“-Djava.security.policy=java.policy.applet”添加到 javaw.exe,不确定这是否与它在 eclipse 中而不是在浏览器中工作的原因有关。令人沮丧的是,我尝试使用与 Eclipse 成功使用的相同的 CL 参数和 PATH 直接运行相同的 javaw.exe 命令。但是,当我直接运行它时,javaw.exe 会立即退出。 jtwitter 是 Twitter API 上的一个简单包装器。

【问题讨论】:

    标签: java security applet twitter


    【解决方案1】:

    浏览器小程序在安全权限较低的沙箱中运行。不允许某些操作,例如某些 GUI 操作(以防止例如小程序在后台秘密运行键盘记录器)。显然您尝试执行的操作也是不允许的。

    要解决这个问题,您必须签署您的小程序。已签名的小程序允许在正常的安全权限下运行。为此,您必须创建一个安全证书并使用jarsigner 签署您的小程序。

    无需购买昂贵的证书,至少如果这是一个小型个人项目。自签名证书就可以了(唯一的麻烦是浏览器会弹出一条消息说“证书无法被确认”或类似的东西)。

    另见:Signed applet tutorial

    【讨论】:

      【解决方案2】:

      @戴夫

      除了让您的 jar 签名之外,您还必须确保将需要标记为特权的代码包装在特权块中。

      final String googleUrl = "www.google.com"
      URL url = (URL) AccessController.doPrivileged(new PrivilegedAction() 
          {
              public Object run() 
              {
                  try
                  {
                      return new URL(googleUrl);
                  }
                  catch (MalformedURLException e)
                  {
                      e.printStackTrace();
                      return null;
                  }
              }  
          });  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2020-11-30
        • 2014-02-14
        • 2013-01-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        相关资源
        最近更新 更多