`

java伪静态--文件防盗链的实现 转

阅读更多

java伪静态--文件防盗链的实现 收藏
现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。这次是Java方向的应用。

首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter),看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().

下面我们就快速的为你的网站搭建Url重写技术。

第一步:下载urlrewrite-2.6.0.现在最新版本是3.1的。(http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip

http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip把urlrewrite-2.6.0.jar拷到classpath下。

第二步:在WEB-INF目录下建一个urlrewrite.xml文件。

第三步:在web.xml中初始化。加上下面的代码:

<!-- Set URL Rewrite-->

<filter>

<filter-name>UrlRewriteFilter</filter-name>

<filter-class>

org.tuckey.web.filters.urlrewrite.UrlRewriteFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>UrlRewriteFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

最后我要简单的讲一下常用的两个配置规则.以下就是简单的urlrewrite.xml配置片段。不要习惯Java的命名法把它写成urlRewrite.xml,这样即使你加上

<init-param>

<param-name>confPath</param-name>

<param-value>/WEB-INF/urlRewrite.xml</param-value>

</init-param>

在启动的服务器的时候还是会报错的,因为源码中必须是全小写的(urlrewrite.xml)且只能放到WEB-INF下面。

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"

"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

<urlrewrite>

<rule>

<from>^/(\w+)/(\w+)/page_(\d+)\.html$</from>

<to type="forward">/$1.htm?category=$2&amp;page=$3</to>

</rule>

<rule>

<from>^/rss/yahoo\.html$</from>

<to type="redirect"> http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/W3CSSiteFeed

</to>

</rule>

</urlrewrite>

所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。

 

<rule>

<from></from>

<to type="forward></to>

</rule>

<from></from>写上你自己定义的访问地址,<to type="forward></to>就是实际的访问地址。比如我们实际的访问地址是:http://baidu.com/entity.htm ?category=user&page=2.而我们想把它重写为http://baidu.com/entity/uesr/page_2.html。这样看起来比我们实际的要好看的多。我们就应该这样的写:

<rule>

<from>^/(\w+)/(\w+)/page_(\d+)\.html$</from>

<to type="forward">/$1.htm?category=$2&amp;page=$3</to>

</rule>

实例:文件防盗链的实现
  由于公司是做网站的,因此会有素材服务器,以前在网站中所有用到素材的地方都直接写的素材文件的绝对下载地址,因此素材的目录部署结构都被暴露在网络中,这样就出现了两个问题:

  1,素材服务器的目录结构部署很容易被人了解到.

  2,素材没有签权,容易被盗链

下面就试着实现了防盗链,以下是解决方案:

利用了urlrewriter和文件流输出解决了这个问题,

urlrewriter是url重新定向,把原有的符合某些规则的url定向到一个jsp,然后在这个jsp里实现签权 ,下面我们就一步一步实现这个防盗链

第一步:新建工程,引入依赖包,在本例子中需要引用urlrewrite-3.0.4.jar包


第二步:在web.xml中配置urlrewriter的过滤器,配置如下:

Web.xml代码

<?xml version="1.0" encoding="UTF-8"?>   
<web-app version="2.4"    
    xmlns="http://java.sun.com/xml/ns/j2ee"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
    <filter><!-- 配置urlRewriter过滤器 -->   
    <filter-name>UrlRewriteFilter</filter-name>   
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>   
    <init-param>   
      <description>是否可以重新载入</description>   
      <param-name>confReloadCheckEnabled</param-name>   
      <param-value>true</param-value>   
    </init-param>   
    <init-param>   
      <description>重新载入时间</description>   
      <param-name>confReloadCheckInterval</param-name>   
      <param-value>1800</param-value>   
    </init-param>   
  </filter>   
  <filter-mapping>   
    <filter-name>UrlRewriteFilter</filter-name>   
    <url-pattern>/*</url-pattern>   
    <dispatcher>REQUEST</dispatcher>   
    <dispatcher>FORWARD</dispatcher>   
  </filter-mapping>   
  <welcome-file-list>   
    <welcome-file>index.jsp</welcome-file>   
  </welcome-file-list>   
  
</web-app>  
<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

  xmlns="http://java.sun.com/xml/ns/j2ee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 

    <filter><!-- 配置urlRewriter过滤器 -->

    <filter-name>UrlRewriteFilter</filter-name>

    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>

    <init-param>

      <description>是否可以重新载入</description>

      <param-name>confReloadCheckEnabled</param-name>

      <param-value>true</param-value>

    </init-param>

    <init-param>

      <description>重新载入时间</description>

      <param-name>confReloadCheckInterval</param-name>

      <param-value>1800</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>UrlRewriteFilter</filter-name>

    <url-pattern>/*</url-pattern>

    <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

  </filter-mapping>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

 

</web-app>


第三步:配置urlrewrite.xml,设置url转化规则

Urlrewrite.xml代码

<?xml version="1.0" encoding="utf-8"?>   
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN" "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">   
<!--   
    Configuration file for UrlRewriteFilter   
    http://tuckey.org/urlrewrite/   
-->   
<urlrewrite>   
    <!-- 编写url转换规则,把所有mp3的访问全部都转移到downloadmp3.jsp进行处理 -->   
    <rule enabled="true">   
        <from>/mp3file/(.+)</from>   
        <to>/mp3/downloadmp3.jsp?file=$1</to>   
    </rule>   
</urlrewrite>  
<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN" "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

<!--

    Configuration file for UrlRewriteFilter

    http://tuckey.org/urlrewrite/

-->

<urlrewrite>

    <!-- 编写url转换规则,把所有mp3的访问全部都转移到downloadmp3.jsp进行处理 -->

  <rule enabled="true">

   <from>/mp3file/(.+)</from>

   <to>/mp3/downloadmp3.jsp?file=$1</to>

  </rule>

 

</urlrewrite>


第四步:编写文件下载签权使用的downloadmp3.jsp,代码如下

Downloadmp3.jsp代码

<%@page language="java"  pageEncoding="gb2312"%>      
<%@page import="java.io.FileInputStream"%>   
<%      
  //可以在这里先完成签权,检查该用户是否有资格进行mp3文件下载   
  //采用文件流输出的方式处理mp3下载:      
  String filename=request.getParameter("file");   
  response.reset();//可以加也可以不加      
  response.setContentType("audio/mpeg");//设置返回头类型       
  //设置下载时显示的文件名   
  response.addHeader("Content-Disposition","attachment;filename="+filename  );          
  java.io.OutputStream outp = null;      
  java.io.FileInputStream in = null;         
  //文件所在的真实路径   
  String realfilepath="D:\\y\\testdownload\\WebRoot\\mp3\\download\\";      
  try      
  {      
  outp = response.getOutputStream();   
  in = new FileInputStream(realfilepath+filename);      
  byte[] b = new byte[1024];      
  int i = 0;        
  while((i = in.read(b)) > 0)      
  {      
  outp.write(b, 0, i);      
  }         
  outp.flush();      
  out.clear();      
  out = pageContext.pushBody();      
  }      
  catch(Exception e)      
  {      
  System.out.println("Error!");      
  e.printStackTrace();      
  }      
  finally      
  {      
  if(in != null)      
  {      
  in.close();      
  in = null;      
  }        
  }      
%>    <%@page language="java"  pageEncoding="gb2312"%>   <%@page import="java.io.FileInputStream"%><%  
  //可以在这里先完成签权,检查该用户是否有资格进行mp3文件下载

  //采用文件流输出的方式处理mp3下载:  

  String filename=request.getParameter("file");

  response.reset();//可以加也可以不加  

  response.setContentType("audio/mpeg");   //设置返回头类型

 

  //设置下载时显示的文件名

  response.addHeader("Content-Disposition","attachment;filename="+filename  );  

 

  java.io.OutputStream outp = null;  

  java.io.FileInputStream in = null; 

 

  //文件所在的真实路径

  String realfilepath="D:\\y\\testdownload\\WebRoot\\mp3\\download\\";

  

  try  

  {  

  outp = response.getOutputStream();

  in = new FileInputStream(realfilepath+filename);  

 

  byte[] b = new byte[1024];  

  int i = 0;  

 

  while((i = in.read(b)) > 0)  

  {  

  outp.write(b, 0, i);  

  }    

  

  outp.flush();  

  out.clear();  

  out = pageContext.pushBody();  

  }  

  catch(Exception e)  

  {  

  System.out.println("Error!");  

  e.printStackTrace();  

  }  

  finally  

  {  

  if(in != null)  

  {  

  in.close();  

  in = null;  

 

  }  

 

  }  

%> 


OK,到此我们的文件防盗链功能也就完成了,你现在可以实现一下,在浏览器地址栏输入出mp3地址,就会被跳到filedown.jsp,你可以在downloadmp3.jsp中完成签权以及其它需要的工作,而且从用户体验来讲,他根本感觉不到这是在访问一个jsp,用户看到的还是在下功一个普通的mp3文件而已


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lsbhjshyn/archive/2010/03/11/5370372.aspx

分享到:
评论

相关推荐

    PHP留言板(增-删-改-查-分页-伪静态-带权限-注册登录)

    这个名为"PHP留言板(增-删-改-查-分页-伪静态-带权限-注册登录)"的项目,是针对初学者设计的一个实践案例,涵盖了Web开发中的诸多基础概念和技术。 1. **PHP**: PHP是一种服务器端脚本语言,专门用于网页开发。在...

    java伪静态的实现doc

    在Java中实现伪静态主要依赖于URL重写技术。 首先,我们可以使用开源库`URLRewriteFilter`来实现这个功能。`URLRewriteFilter`是一个基于Servlet的过滤器,它可以拦截HTTP请求并按照预设规则重写URL。在项目中,你...

    java伪静态简单实例

    Java伪静态技术是一种在Web开发中用于优化搜索引擎友好度(SEO)的技术,它使得动态URL看起来像静态的HTML页面,从而提升网站的可读性和用户体验。在这个实例中,我们将探讨如何使用`urlrewrite`框架来实现Java中的...

    网站伪静态的实现方法----内含说明与jar包

    网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站...

    DZX3.5伪静态规则文件

    在这个场景下,"DZX3.5伪静态规则文件"指的是该系统用于实现伪静态功能的配置文件。 伪静态的主要优点在于: 1. **搜索引擎友好**:静态URL对于搜索引擎更加友好,因为它们看起来更像目录结构,有助于爬虫更好地...

    dz伪静态文件

    不过,大多数虚拟主机提供商允许用户通过控制面板或.htaccess文件(适用于基于Apache的主机)来实现伪静态。对于Discuz! 用户,在虚拟主机上设置dz伪静态文件,可能需要将提供的伪静态规则复制到相应的位置,例如....

    伪静态的实现及伪静态的意义.ASP.NET

    相比之下,伪静态则通过服务器端的重写规则,在不生成实际静态文件的情况下,实现类似静态页面的效果,降低了对硬盘的依赖,同时也减少了I/O操作的风险。 然而,伪静态并非没有弊端。其主要缺点在于CPU资源的消耗。...

    jsp伪静态,javaweb实现伪静态

    6. **实例分析**:在提供的“jsp伪静态-实现”压缩包中,可能包含了具体的代码示例,如Servlet的实现、web.xml的配置以及相关的HTML和JSP文件。通过这些实例,你可以了解到如何在实际项目中应用上述理论知识。 7. *...

    DZX2.5最新伪静态规则-亲测可用

    另一个文件“DZX2.5最完整的伪静态规则文件”很可能就是我们要找的伪静态规则配置文件,它可能包含了适用于DZX2.5的所有必要规则。 总的来说,DZX2.5的伪静态规则对于提升网站的用户体验和SEO表现至关重要。通过...

    DZ X 1.5 最新伪静态文件

    X 1.5中,实现伪静态可能需要配置Apache服务器的.htaccess文件,或者通过后台管理面板进行设置。 Apache的.htaccess文件是服务器上的一个配置文件,允许对单个目录进行自定义设置,包括重写URL规则。在伪静态配置...

    mayicms蚂蚁分类信息5.8、5.9伪静态规则

    总的来说,mayicms蚂蚁分类信息5.8、5.9版本的伪静态规则是通过服务器配置实现的,目的是为了提供更友好的URL,增强SEO效果。正确配置和应用这些规则,能有效提升网站的用户体验和搜索引擎排名。

    mysql-connector-java-gpl-5.1.36

    "mysql-connector-java-gpl-5.1.36"是MySQL Connector/J的一个特定版本,发布于GPL(GNU General Public License)许可下,意味着它是开源且可自由分发的。 MySQL Connector/J 5.1.36是针对MySQL 5.1系列数据库...

    discuz伪静态配置方法

    4. **.htaccess文件**:Apache服务器环境下,配置伪静态通常需要用到`.htaccess`文件。这个文件包含了重写规则,告诉服务器如何处理特定的URL请求。在Discuz的伪静态配置中,需要将解压后的`.htaccess`文件上传到...

    java静态文件处理

    在Java编程语言中,处理静态文件是一项常见的任务,特别是在构建Web应用程序时。静态文件通常指的是HTML、CSS、JavaScript、图片等非动态内容,这些文件在服务器端不需要额外的处理即可发送给客户端。本篇文章将深入...

    JSP伪静态实现

    ### JSP伪静态技术概述与实现 #### 一、伪静态技术简介 伪静态技术是一种将动态网页(如JSP)伪装成静态网页的技术。它通过URL重写等手段,将原本带有查询字符串的动态URL转换为易于记忆且对搜索引擎友好的静态URL...

    伪静态插件 asp伪静态

    本文将详细探讨“伪静态插件”以及如何在ASP环境下实现伪静态,并提供关于个性化后缀和网站后缀修改的一些建议。 首先,我们要理解什么是伪静态。静态网页是指内容固定、不依赖服务器动态生成的网页,而动态网页则...

    伪静态的源码 伪静态 伪静态 伪静态 需要的来

    在这个压缩包中,可能包含了实现伪静态功能的源代码,适合需要进行这方面技术研究或者网站优化的开发者。 伪静态的主要目的是解决动态网址对搜索引擎抓取的不友好问题。动态网址通常包含问号(?)、等号(=)以及...

    简单的伪静态,看了很多 自己做了一个简单的jsp的伪静态,和大家分享哈,其实很简单的

    【标题】中的“简单的伪静态”...总的来说,这个压缩包可能包含了一个基本的Java伪静态实现,主要利用UrlRewriteFilter进行URL重写,有兴趣的读者可以通过下载并分析源码,了解其具体实现细节,以应用到自己的项目中。

    asp.net伪静态完整代码

    描述“asp.net实现URL的伪静态,重写URL地址”进一步强调了这个代码示例是关于如何在ASP.NET应用中实现URL重写,这是伪静态的核心部分。URL重写技术允许开发者创建一个内部处理逻辑与外部显示的URL不一致的系统,...

    伪静态页面生成技术|静态页面|生成技术

    在互联网世界中,提高网站的搜索引擎优化(SEO)和用户体验是至关重要的,而伪静态页面生成技术正是实现这一目标的有效手段。伪静态页面,顾名思义,是一种将动态网页以静态HTML页面的形式呈现的技术,它保留了动态...

Global site tag (gtag.js) - Google Analytics