方案:
现在很多网站也意识到这点,并采取了相关的解决方案,比如大家会用一个动态的地址
如: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过滤器使用,让我茅塞顿开!就是它!!
晚上回到家里一顿翻阅资料,顺便写了一个程序,结果是防住了,但是正常的系统程序也访问不了了,今天回来很是郁闷,这方面资料也不多,现在把程序搞了一下,总算可以目录授权了,供大家参考!
---------------------------------------web.xml配置文件-------------------------------------------
这样,就可以在这个过滤器过虑之后得到授权就可以访问相应的目录了,即使你事先知道文件的绝对地址,你也是无法访问的。
现在很多网站也意识到这点,并采取了相关的解决方案,比如大家会用一个动态的地址
如: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;
}
}
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 >
< 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 >
这样,就可以在这个过滤器过虑之后得到授权就可以访问相应的目录了,即使你事先知道文件的绝对地址,你也是无法访问的。