日期:2014-05-18  浏览次数:20611 次

求助!在JSP中实现登陆才能下载的方法.
我试过给已登陆的会员创建一个session,然后在下载的那个页面提取出session的值,String   user=(String)session.getValue( "cookie ");然后通过给负责下载的servlet两个参数,一个就是下载的文件名,另一个是用户名. <a   href=down?fileName=miss.mp3&user= <%=user%> > .如果用户名为空,则不能下载.


public   void   doGet(HttpServletRequest   request,   HttpServletResponse   response)
throws   ServletException
{
String   fileName   =   request.getParameter( "fileName ");
String   user=request.getParameter( "user ");

if(user!=   null   &&   !user.equals( " "))//就是加了这句

{
if   (fileName   !=   null   &&   !fileName.equals( " "))
{
String   filePath   =   this.getServletContext().getRealPath( "/ ")
+   "\\fordownload\\ "   +   fileName;
try
{
File   file   =   new   File(filePath);
FileInputStream   fis   =   new   FileInputStream(file);
response.setCharacterEncoding( "GBK ");
response.setContentType( "application/x-msdownload ");
response.setContentLength((int)   file.length());
String   str   =   "attachment;filename= "   +   file.getName();
response.setHeader( "Content-Disposition ",   str);
ServletOutputStream   sos   =   response.getOutputStream();
byte[]   data   =   new   byte[1024];
int   length   =   0;
while   ((length   =   fis.read(data))   >   0)
{
sos.write(data,   0,   length);
}
sos.close();
fis.close();
}   catch   (IOException   ioe){ioe.printStackTrace();}
}
}

}
结果参数是传进去了,可还是不能下载.说不能获取文件的长度.之前没有user这个参数时是可以下载的.why????????


有人说可以用过滤器,在过滤器中检查会话,如果登陆转向到一个带 <a       href= "... "> </a> 链接的页面,过滤器怎么写?

------解决方案--------------------
加一段logic标签控制.非常简单的
<logic:notPresent> <logic:present> 怎么用,嘿嘿,相信你知道.不知道就去网上查查.具体再怎么做就很简单了
------解决方案--------------------
第一,按照你的方案
你不需要传入user,只需确认session中是否有user就可以了

第二,使用Filter将download 的servlet放在filter之后,在filter中确认session中的user信不存在的时候直接返回

第三,如楼上说的logic:present可以在页面上显示或者不显示download链接,但是最好再使用上述两种方法中的一种,否则直接在浏览器的地址栏中输入下载地址还是可以下载文件的。