J2EE 文件目录授权

  方案:
    现在很多网站也意识到这点,并采取了相关的解决方案,比如大家会用一个动态的地址
如:xxx.xxx.xxx.xxx/download.jsp?id=14521,这样的方法确实不错其原理是利用下载时产生一个随机的Session,就像很多验证码一样,每次下载可能都会不一样,这样终于难倒一批人了。
  其实这个防盗链技术,我是研究了很久了,追述到在学校期间,发的一些原创的图片,结果被无数的网站盗链,不得以才频频更换目录,结果极大的影响了我对文件案的管理,有一次看到JavaResearch
是 一个专门讲JAVA技术的网站,我想下载一个电子书,我看到了如下地址:htttp: //www.javaresearch.com/user/javaImplements.chm这样的地址,我点击下载,结果还是被拒绝下载了,当时很 是不理解,静态地址可是盗链的必杀呀!但是这个网站是使用php的,我也看到了php的解决方案。
  但是我就是不相信Tomcat不能有这个功能,差了无数的资料,在CSDN上也发了不少问题,结果大家的意见都是带动态参数的,我都放弃了。
  实在万不得已了,我想自己写一个服务器端处理程序,让Tomcat居于后台,我的程序接受网络第一关,每次接受请求都先通过一个文件授权的防火墙程序,授权后才交给Tomcat这个笨蛋去执行响应。
  昨天下午,突然有一个网友向我提起J2EE的Filter过滤器使用,让我茅塞顿开!就是它!!
  晚上回到家里一顿翻阅资料,顺便写了一个程序,结果是防住了,但是正常的系统程序也访问不了了,今天回来很是郁闷,这方面资料也不多,现在把程序搞了一下,总算可以目录授权了,供大家参考!
// DownloadFilter.java
package  dev.filter;

// 导入相关包
import  javax.servlet.Filter;
import  javax.servlet.ServletResponse;
import  javax.servlet.ServletRequest;
import  javax.servlet.http.HttpSession;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  javax.servlet.FilterChain;
import  javax.servlet.FilterConfig;
import  javax.servlet.ServletException;
import  java.io. * ;

// 编写一个实现javax.servlet.Filter接口的WEB过滤器.
public   class  DownloadFilter  implements  Filter {
    
protected FilterConfig filterConfig;
    
public void init(FilterConfig filterConfig)throws ServletException{
          
this.filterConfig=filterConfig;
      }

     
      
//具体功能代码在doFilter方法里实现.doFilter方法由容器自动调用.
      public void doFilter(ServletRequest srequest,ServletResponse
          sresponse,FilterChain chain)
throws IOException,ServletException{
          String user
=null;
          HttpSession session;
          
//得到当前Session.
          session=((HttpServletRequest)srequest).getSession();
          
//提出session中名称为userName的String对象.
          if(session!=null){
            
try {
              user 
= session.getAttribute("userName").toString();
            }

            
catch (Exception e) {
              user 
= null;
            }

          }

          
//进行验证.如果用户为空.或用户名不为"admin",则视为非法请求.转发到 error.jsp页.

          
if(user==null||(!user.equals("admin"))){
                ((HttpServletResponse)sresponse).sendRedirect(
"error.jsp");
                
return;
          }

          
//通过过滤链把处理权发送到下一个Filter.
          chain.doFilter(srequest,sresponse);        
      }


      
public void setFilterConfig(final FilterConfig filterConfig){
          
this.filterConfig=filterConfig;  
      }


      
public void destroy(){
          
this.filterConfig=null;  
      }


}

---------------------------------------web.xml配置文件-------------------------------------------
<? xml version="1.0"  ?>
< web-app >
< filter >
  
< filter-name > df </ filter-name >
  
< filter-class > dev.filter.DownloadFilter </ filter-class >
</ filter >
< filter-mapping >
  
< filter-name > df </ filter-name >
  
< url-pattern > /downloads/* </ url-pattern >
</ filter-mapping >
</ web-app >

这样,就可以在这个过滤器过虑之后得到授权就可以访问相应的目录了,即使你事先知道文件的绝对地址,你也是无法访问的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值