Java - 作为特定用户连接到网络路径

时间:2015-06-26 18:27:24

标签: java permissions network-programming manifest

目前我有一个java应用程序,它加载了一个xml文件,并为用户提供了一个简单的gui来编辑xml文件的特定字段。但是,此xml将存在于网络路径上。只要用户已登录到网络位置,应用程序就会加载并执行。但是,如果他们没有专门连接到该位置,并且未登录"则应用程序将不会执行。

在加载文件时,有什么方法可以作为特定用户连接到网络路径?

感谢阅读。下面的代码片段。

样本位置(已移除IP地址)

private static final String wg01x = "\\\\0.0.0.0\\d$\\Variable_Namedropper_XMLs\\WG01_Variable_NameDropper_XML\\VancInsertionLabelDatelineTC.xml";

Parser Constructor Snip

public Parser(String fp){

    // File Path Of XMl 
    try{
        this.setFilePath(fp);
    }catch(Exception e ){
        e.printStackTrace();
    }
    // Main DOM Object, Uses implicit FilePath 
    this.setDom(this.normalizeDocument());

normalizeDocument()

public Document normalizeDocument(){
     File xmlFile = new File(this.filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;

        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();
            return doc;

        }catch(Exception e){
            e.printStackTrace();
        }

清单

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity version="1.1.1.1"
    processorArchitecture="X86"
    name="NameDropper_wg01Y.exe"
    type="win32"/>
   <description>NameDropper</description>
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
     <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
       </requestedPrivileges>
      </security>
    </trustInfo>
   </assembly>  

编辑::也欢迎使用替代方法。我应该能够访问/拥有网络位置(可能)

2 个答案:

答案 0 :(得分:1)

一般来说,这是一个坏主意......我只是把它放在那里,因为它可能会弄乱元数据或者你有什么。

但我仍然会帮助,因为这很有趣。我相信它与你的normalizeDocument()上的File构造函数有关。我自己从来没有这样做,但我做了一些搜索,我认为这可能会帮助你。

Read remote file in java which needs username and password

答案 1 :(得分:0)

虽然@Syrrus发布的帖子在概念层面上是有用且有趣的,但我无法让它为我的目的而工作。

但是,我提出了一个有效的解决方法! 更新后的代码如下。该方法不是使用Java对象,而是与运行时环境交互并执行连接到该位置的cmd。 exec字符串在示例中没有正确格式化,因为我隐藏了当前硬编码到其中的用户信息

public Document normalizeDocument(){ File xmlFile = new File(this.filePath); connectToNetworkLocation();

     public void connectToNetworkLocation(){
       try{
        Process p = Runtime.getRuntime().exec("net use \\\\0.0.0.0\\c$ pword /USER:usr");
        p.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line;
        while((line = reader.readLine()) != null){
            System.out.println(line);
        }

    }catch(Exception e ){
        e.printStackTrace();
    }
}`