噢,就以下两个情况讨论吧:1、假设文件名是 a.tar ,所在路径是 http://localhost:8080/App/a.tar,那么明显的,文件的URL已经公开了,但如何实现,只有用户登陆之后才能下载呢?2、还是假设文件名是 a.tar. 所在路径不公开。如何实现,当用户在浏览器输入 http://localhost:8080/App/download?userId=myId&Downid=888 的时候自动就弹出对话框要求用户保存下载文件呢?我看到好多网页都这么做的,但不知道如何实现.其中myId是用户名,DownId指代a.tar 在数据库中对应的id.唉,对Web的东西真是不懂。谢谢大伙。

解决方案 »

  1.   

    用servlet 先验证权限后在进行下载动作就可以了
      

  2.   

    To jihanzhong(逍遥):
    不是很懂你的意思,能否具体一点????
      

  3.   

    if(session.getAttribute("isLogin").equals("true")){
    File file = new File("");
    response.setHeader("","");
    response.write(file.read());
    }
    这就是思路
      

  4.   

    To dreamover(梦醒了):
    你这个思路貌似行得通,但是浏览器支持断点续传的话,你这种做法就把断点续传抹杀了吧??一般情况下,假设用户登陆 http://localhost:8080/App/a.tar 下载a.tar 假设中途断开了,下一次继续这样访问,可以断点续传的..你那种做法,貌似不行吧?
      

  5.   

    第二种情况:用servlet 先验证权限后在进行下载动作就可以了
    第一种情况:不清楚,感觉要在Web服务器层次上设定用户,然后进行登录验证。
      

  6.   

    To trumplet(检查):
    能否具体??
      

  7.   

    To VisualLion(狮子):
    第一个问题能否具体点?
      

  8.   

    我记得有些web服务器可以配置用户,具体我也没有用过。感觉第一种方案不好。
      

  9.   

    写个filter来进行访问控制就OK了, 说有的资源都可以在你的控制之下。
      

  10.   

    1. 在web.xml里加上:<security-constraint>
            <web-resource-collection>
                <web-resource-name>HTMLManger and Manager command</web-resource-name>
                             //a.doc和ccc.txt是需要登录才能查看或下载的文件            
                <url-pattern>/a.doc</url-pattern>
                <url-pattern>/ccc.txt</url-pattern>             <http-method>GET</http-method>
                <http-method>POST</http-method>        </web-resource-collection>
            <auth-constraint>
                <!-- NOTE:  This role is not present in the default users file -->
                <role-name>manager</role-name> //这个组的成员用户登录后可以下载上述文件
            </auth-constraint>
        </security-constraint>
        
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name></realm-name>
        </login-config>
        
        <security-role>
            <description>
                The role that is required to log in to the Manager Application
            </description>
            <role-name>manager</role-name> //这个组的成员用户登录后可以下载上述文件
        </security-role>2. 以tomcat为例,在TOMCAT_HOME/conf/tomcat-users.xml里定义上述组,和这个组的一些成员用户。
      

  11.   

    我试验时,下载a.doc有时出现问题,因为我也是一知半解,所以不知什么原因,但ccc.txt没问题。
      

  12.   

    To trumplet(检查) :但问题是,我的用户是动态的哦,例如在数据库里头...
      

  13.   

    to:trumplet(检查)
    我想你的解决方案是对特定Web服务器绑定的。
      

  14.   

    那就用servlet对访问你那个下载目录进行控制啊,即先验证下是否登陆
    或者连接到一个下载页面,不要直接连接到文件
    用jspsmartupload,再在下面这里加上是否登陆的验证即可如下
    <%@ page language="java" import="com.jspsmart.upload.*"%><jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" /><%

    // Initialization
    mySmartUpload.initialize(pageContext);

    // Download file
    mySmartUpload.downloadFile("/upload/sample.zip");

    // With a physical path
    // mySmartUpload.downloadFile("c:\\temp\\sample.zip")

    // With options
    // mySmartUpload.downloadFile("/upload/sample.zip","application/x-zip-compressed","downloaded.zip")%>
      

  15.   

    不是特定的web服务器,这是j2ee安全规范的使用方法。
    还以tomcat为例,可以把服务器设定使用jdbc realm,或DataSource realm,用户名和密码对应数据库中的某个表(列)。google或baidu一下“j2ee安全”,有很多相关的文章
      

  16.   

    To zhh1981(**的猪头):
    这是什么方法来着?
      

  17.   

    那是用jspsmartupload上传组件进行下载啊,去网上搜一个或我发你一个就是了
    QQ:464199843
      

  18.   

    你用WINRAR压缩加密一下行不行?呵呵,提供一种方法而已