Java 小程序 java.security.AccessControlException

2024-01-30

我正在开发一个打印文件的 Java 小程序。 该小程序是“自签名的”。

打印函数为:

//argFilePath : path to file (http://localhost/Teste/pdf1.pdf)
//argPrintService : something like PrintServiceLookup.lookupDefaultPrintService()
private int print(String argFilePath, PrintService argPrintService){
    try 
    {   

        DocPrintJob printJob = argPrintService.createPrintJob();
        Doc doc;
        DocAttributeSet docAttrSet = new HashDocAttributeSet();
        PrintRequestAttributeSet printReqAttr = new HashPrintRequestAttributeSet();


            URL url = new URL(argFilePath);
            doc = new SimpleDoc(url.openStream(), DocFlavor.INPUT_STREAM.AUTOSENSE, docAttrSet);


            printJob.print(doc, printReqAttr);



    } catch (Exception e) {
        System.out.println(e);
        return 1;
    }

    return 0;
}

尝试打开文件时出现此异常:

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:80 connect,resolve)

HTML/JavaScript

<input onclick="alert(document.getElementById('xpto').print('http://localhost/Teste/pdf1.pdf'));" type="button"/>

 <applet width="180" height="120" code="printers.class" id="xpto" archive="printerAPI.jar"></applet>

正确使用:

DocFlavor.INPUT_STREAM.AUTOSENSE

这个想法似乎是打印尽可能多的文件类型 - pdf、docx、jpg 等。

如何修复异常?


找到了答案(在 stackoverflow 上哈哈:D)!

看起来问题是:

“javascript没有文件访问权限” https://stackoverflow.com/questions/1068271/signed-applet-gives-accesscontrolexception-access-denied-when-calling-from-java

所以小程序被阻止了。我们必须使用

AccessController.doPrivileged()

做特权 http://www.inf.puc-rio.br/~roberto/java/jdk1.2/docs/guide/security/doprivileged.html

这是我的实现:

private int print(String argFilePath, PrintService argPrintService){
        cPrint cP = new cPrint(argFilePath, argPrintService);
        return  (Integer) AccessController.doPrivileged(cP);
    }

class cPrint implements PrivilegedAction<Object> {
    String FilePath;
    PrintService PrintService;

    public cPrint(String argFilePath, PrintService argPrintService) {

        this.FilePath = argFilePath;
        this.PrintService = argPrintService;

    };
    public Object run() {
        // privileged code goes here

        try 
        {   

            DocPrintJob printJob = PrintService.createPrintJob();
            Doc doc;
            DocAttributeSet docAttrSet = new HashDocAttributeSet();
            PrintRequestAttributeSet printReqAttr = new HashPrintRequestAttributeSet();



                URL url = new URL(FilePath);
                doc = new SimpleDoc(url.openStream(), DocFlavor.INPUT_STREAM.AUTOSENSE, docAttrSet);

                printJob.print(doc, printReqAttr);



        } catch (Exception e) {
            System.out.println(e);
            return 1;
        }

        return 0;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 小程序 java.security.AccessControlException 的相关文章

随机推荐

  • eclipse 不适用于 ubuntu 16.04

    我刚刚安装了ubuntu 16 04并下载了eclipse并解压 当我启动 Eclipse 时 欢迎页面是空的 当我启动 eclipse 市场时 什么也没有发生 如何解决这个问题 编辑完后尝试启动 Eclipseeclipse ini文件并
  • IE10 SCRIPT5009:“__doPostBack”未定义

    我在使用 ASP NET 控件的 IE10 上遇到问题 需要 JavaScript 回发 例如链接按钮 它可以在 IE9 版本以及 IE10 兼容模式下正常工作 但在 IE10 标准模式下 出现以下错误 SCRIPT5009 doPostB
  • 使用 gradle 脚本结帐

    我是 gradle 新手 我想使用 gradle 脚本签出远程存储库 可以运行 shell 命令 Inside gradle 任务来使用日期时间戳 shell 命令克隆远程存储库 是的 您可以使用 gradle Exec 类型任务在 OS
  • PHP 中的 preg_replace - NOT 条件的正则表达式

    我正在尝试使用 preg replace 在 PHP 中编写一个函数 它将替换列表中未找到的所有字符 通常我们会替换它们所在的位置 但这个不同 例如 如果我有字符串 mystring ab2c4d 我可以编写以下函数 将所有数字替换为 pr
  • 从 Mysql 导出 CSV

    我在导出使用 php 从我的 mysql 表之一创建的 csv 文件时遇到了一些麻烦 我使用的代码打印了正确的数据 但我看不到如何在 csv 文件中下载这些数据 而是提供了创建的文件的下载链接 我以为浏览器应该自动提供文件供下载 但事实并非
  • Java:如何检查数组中的元素是否已初始化?

    我想检查数组中的某个元素是否已初始化 我该怎么做 创建数组时 数组中的所有值都会被初始化 初始值可以明确设置 例如X xs x1 xN 或者在实例化数组时分配默认值 对于对象数组 每个元素的默认值是null for a boolean数组
  • 在 Windows Phone 7 上录制扬声器

    您知道是否可以拦截 win Phone 7 上的音频流并记录扬声器上正在播放的内容 或者 我使用 MediaElement 有没有办法获取当前流 我想在达到特定频率时添加一些动画 thanks 只要您知道该媒体的位置并可以启动下载 您就可以
  • Simple_form 必填字段不起作用 - Ruby on Rails

    我在 RoR 应用程序中有一个使用 simple form 构建的提交表单 当字段为空时 应用程序仍会进入下一步 不会提示错误或警告 这些字段应该是默认的required true 但即使手动编写也不起作用 该应用程序有 3 个步骤 New
  • 创建交换链失败

    我正在关注 DX 示例和 MSDN 参考 但现在遇到了困难 我从 D3D11CreateDeviceAndSwapChain 获取 E InvalidArg 的 HRESULT 我知道它是我传递的 IDXGIAdapter 因为如果我将其更
  • Gradle war 清单版本号对于发布版本错误

    我有一个构建 war 文件的 gradle 项目 并包含一个清单 war archiveName archive war manifest attributes Implementation Title project name Imple
  • 无法从 Matplotlib 轴中删除流图箭头

    我怎样才能删除一个流线图 https matplotlib org 3 2 1 api as gen matplotlib pyplot streamplot html来自 Matplotlib 绘图而不清除所有内容 i e 不使用plt
  • LInq 排序依据和排序依据描述

    我正在使用 Linq 来过滤对象列表并对它们进行排序 例如 myList Where x gt x Item SF x AdSize minadSize OrderBy x gt x ManufacturingDate OrderBy x
  • MGTwitterEngine 和 iPhone

    我下载了 MGTwitterEngine 并添加到我的 iPhone 项目中 它正在连接并获取雕像 我可以通过将它们转储到 NSLog 中来判断它们 但是 我不知道如何解析这些调用 以便将它们添加到表中 它们以 NSString 形式返回
  • Grails 应用程序的种子数据

    将种子 初始或测试 数据加载到 grails 应用程序中的最佳方法是什么 我正在考虑 3 个选择 将所有内容放入 BootStrap groovy 文件中 如果领域类和测试数据很多 这会很乏味 编写自定义功能以通过 xml 加载它 借助 g
  • 从小书签加载模式窗口(如亚马逊愿望清单小书签)

    我正在使用一个书签来加载一个 html 页面 一切都很好 但是 由于浏览器的外观通常很丑陋 所以看起来不太热 有没有办法完全无框架加载页面 就像它的 jquery 模态版本一样 我认为它不可能在页面内实现 可以说是覆盖自身 有没有办法可以在
  • 如何从根网站及其所有子网站循环访问

    我遇到了一个需要解决的问题 我想循环访问根网站及其所有子网站 并希望设置一些属性 using System using System Collections Generic using System Linq using System Te
  • 如何将 Swift 对象转换为字典

    我对 iOS 编程还比较陌生 然而 我认为 Swift 会有一种自动方式将对象转换为 JSON 反之亦然 话虽这么说 我已经找到了几个可以做到这一点的库 然而 似乎无论您如何将数据发布到 Web 服务 甚至使用 AlamoFire 之类的东
  • java.lang.InternalError:名称太长而无法表示

    我收到此错误 java lang InternalError name is too long to represent at java lang ClassLoader defineClass1 Native Method at java
  • 使用批处理脚本从文本文件中删除多行字符串

    我正在尝试创建一个批处理文件 该文件将编辑文本文件以删除包含特定字符串的行and之后直接删除该行 该文件的示例如下所示 LINE ENTRY KEEP 1 BLA BLA END LINE ENTRY REMOVE 1 FOO BAR EN
  • Java 小程序 java.security.AccessControlException

    我正在开发一个打印文件的 Java 小程序 该小程序是 自签名的 打印函数为 argFilePath path to file http localhost Teste pdf1 pdf argPrintService something