Internet explorer URL重定向:服务器端重定向到IE中的目录/文件夹

Internet explorer URL重定向:服务器端重定向到IE中的目录/文件夹,internet-explorer,browser,servlets,bit.ly,Internet Explorer,Browser,Servlets,Bit.ly,我正在实现一个类似bit.ly的URL缩短器。为此,我有一个JavaServlet后端,它为每个重定向请求执行response.redirect(targetURL) 这对于HTTP请求很好,但是我在文件://协议方面遇到了问题。问题在于: 目标是一个目录(例如file:///N:/somefolder其中N:是网络驱动器) 客户端浏览器是IE 对于Firefox,这很好,目录列表显示在浏览器中,就像我键入了“file:///n:/somefolder地址栏中的“”(我已将我的服务器添加到Fir

我正在实现一个类似bit.ly的URL缩短器。为此,我有一个JavaServlet后端,它为每个重定向请求执行
response.redirect(targetURL)

这对于HTTP请求很好,但是我在
文件://
协议方面遇到了问题。问题在于:

  • 目标是一个目录(例如
    file:///N:/somefolder
    其中
    N:
    是网络驱动器)
  • 客户端浏览器是IE
  • 对于Firefox,这很好,目录列表显示在浏览器中,就像我键入了“
    file:///n:/somefolder地址栏中的“
    ”(我已将我的服务器添加到Firefox的受信任URI列表中)

    对于IE,如果我键入“
    file:///n:/somefolder
    ”进入浏览器并按Enter键,将打开一个新的资源管理器窗口。这正是我在服务器端重定向时想要的行为,但这根本不起作用。我收到“IE无法打开…”错误

    这不可能吗?或者是否有类似于Firefox首选项的设置,将我的服务器添加到“受信任”URL列表中,以便进行重定向

    请注意,如果目标是一个文件,例如
    'file:///n:/somefolder/test.doc“
    即使在IE中,这也可以很好地工作


    提前谢谢

    由于安全原因,应该限制从远程资源到本地资源的重定向,但并非所有浏览器都正确执行此操作

    有关漏洞利用的示例,请参阅本公告


    由于安全限制,这是不可能的。如果服务器机器也可以在
    java.io
    级别访问这些资源,那么您可以自己充当某种代理。只需创建一个
    Servlet
    ,它使用
    FileInputStream
    获取它的
    InputStream
    ,并将它与一组正确的头一起写入
    HttpServletResponse
    OutputStream

    下面是这样一个servlet的
    doGet()
    的样子:

    String filename = request.getPathInfo();
    File file = new File("n:/somefolder", filename);
    
    response.setContentType(getServletContext().getMimeType(file.getName()));
    response.setContentLength(file.length());
    
    BufferedInputStream input = null;
    BufferedOutputStream output = null;
    
    try {
        input = new BufferedInputStream(new FileInputStream(file));
        output = new BufferedOutputStream(response.getOutputStream());
    
        byte[] buffer = new byte[1024];
        for (int length = 0; (length = input.read(buffer)) > 0;) {
            output.write(buffer, 0, length);
        }
    } finally {
        if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
        if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
    }
    

    将此servlet映射到
    url模式上,如
    /files/*
    ,并使用
    http://example.com/contextname/files/test.doc
    。你可以找到另一个基本的例子。

    嗯,我的问题没有得到任何令人满意的答案。我发现了一个在IE中重定向到目录时有效的解决方法:让服务器发送指向目标的链接,而不是实际的重定向。例如,服务器发送表单的html

    <a href="file:///N:/somefolder">click here</a>
    
    
    

    这需要用户进行额外的点击,但会起作用。

    我知道我在servlet中不是一个热门人物,所以请原谅我这听起来有点傻:您所提供的看起来像一个文件servlet。我想问的是-为什么可以在Internet Explorer上执行response.redirect(“N:/somefolder/somefile.doc”)而不是response.redirect(“N:/somefolder”)?(两者都在Firefox上工作)我看不到这里的相关性。。。