- 浏览: 1072314 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (30)
- Spring (14)
- iBATIS (6)
- Hibernate (13)
- JVM (5)
- JSON (10)
- Ajax (5)
- Flex (1)
- JavaScript (25)
- PowerDesigner (4)
- 项目管理 (7)
- 数据库 (29)
- 生活 (18)
- 软件应用 (21)
- 无线技术 (2)
- Linux (39)
- TOP开发学习 (2)
- JAVA工具小TIPS (2)
- Java通用 (52)
- XML (3)
- 软件测试 (29)
- Maven (10)
- Jquery (1)
- 正则表达式 (3)
- 应用服务器 (15)
- Android (5)
- linux 和windowx 下 tomcat 设置JVM (8)
- 应用服务器 连接池 (4)
- Linux 后台输出中文乱码 (1)
- Hadoop (28)
- python (2)
- Kafka (7)
- Storm (5)
- Elasticsearch (7)
- fddd (1)
最新评论
-
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
分布式消息系统Kafka初步 -
小灯笼:
LoadRunner性能测试实战课程网盘地址:http://p ...
LoadRunner性能测试应用(八) -
成大大的:
Kafka分布式消息系统实 ...
分布式消息系统Kafka初步 -
hulalayaha2:
Loadrunner性能测试视频教程下载学习:http://p ...
LoadRunner性能测试应用(八) -
993042835:
搞好 谢谢
org.hibernate.exception.ConstraintViolationException: could not delete:
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&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&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
-->
<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
发表评论
-
SSO单点登录解决方案[转载]
2013-05-01 12:41 8531 什么是单点登陆 ... -
ognl.MethodFailedException: Method "setId" failed for object
2013-04-23 20:27 1502log4jStrutsJavaWeb ... -
response设置编码的三种方式
2013-04-13 22:14 36478在一个utf-8项目中,调用支付宝的及时到账支付接口,本身的 ... -
dynamic web project 生成位置
2013-04-07 13:26 814dynamic web project 生成位置 在wor ... -
Spring的自动任务中调用业务类方法
2012-03-21 15:18 1392Spring 中使用 QuartzJobBean 来进行定 ... -
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
2011-08-02 12:46 2061我在使用Struts2进行开发的时候老是报下面的错误: 严重: ... -
java.lang.NoSuchMethodException:
2011-01-06 22:46 1336java.lang.NoSuchMethodException ... -
struts2解决中文乱码的问题
2010-12-13 13:45 1027在struts2.0中,解决中文乱码的问题有时候很糟人。以下是 ... -
jquery struts2 IE8 乱码问题
2010-12-03 14:12 1229原因如下: 我们是用struts2框架,str ... -
Struts2中配置action 传参问题
2010-09-28 10:51 1428最近在Struts2中配置action时,经常要在配置文件中给 ... -
org.apache.struts2.json.JSONException:
2010-08-05 17:47 12080org.apache.struts2.json.JSONExc ... -
Struts 2 完成直接输出流到浏览器
2010-04-27 16:58 1820Struts 2 完成直接输出流到浏览器 2008年10月1 ... -
java图片处理 文字水印 图片水印 缩放 补白
2010-04-26 08:56 1019java图片处理 文字水印 图片水印 缩放 补白时间:2009 ... -
在java中集合的遍历是怎样遍历的
2010-04-19 21:05 957List<String> ... -
破解(百度,网易,新浪,搜狐,QQ空间)图片防盗链 转
2010-04-15 14:37 2051破解(百度,网易,新浪,搜狐,QQ空间)图片防盗链 大家在连 ... -
Lucene基于Java的全文检索引擎简介(转)
2010-04-08 09:13 778ddd -
采用struts2防止重复提交后无法采用request.getParameter("xxx")得到页面隐藏框值解决方案(转)
2010-03-29 14:07 1758采用struts2防止重复提交 ... -
jsp中的basePath和path
2010-03-26 09:15 1680jsp中的basePath和path 2010年01月13日 ... -
Struts2的标签 逻辑标签---IF标签
2010-03-22 21:40 3214Struts2的标签库中,有一 ... -
高级项目进行时 转
2010-03-11 18:32 936高级项目进行时 已有 ...
相关推荐
php+mysql 留言板, 功能齐全,(增-删-改-查-分页-伪静态-带权限-注册登录)。学习专用。
java伪静态的实现doc,java伪静态的实现doc,java伪静态的实现doc
java伪静态简单实例 java urlrewrite 伪静态简单实例
伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪静态伪...
nginx配置 -伪静态-重定向-包括域名、目录、文件等配置方法.pdf
网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站伪静态的实现方法----内含说明与jar包网站...
java urlrewrite 实现伪静态化 demo源码 http://www.cnblogs.com/liujun0930/archive/2011/12/05/2276553.html
ASP.NET MVC4通过UrlRewriter配置伪静态,在网上都有很多资料,这里主要是把项目中使用到的通过UrlRewriter配置伪静态提取出来,方便自己以后查看,同样对需要该功能的网友提供思路。
DZX3.5伪静态规则文件
伪静态文件最新伪静态文件最新伪静态文件最新伪静态文件最新伪静态文件最新伪静态文件最新伪静态文件最新伪静态文件
php-rewrite网站伪静态测试文件,测试你的空间是否支持伪静态。
伪静态URL重写是通过微软公司封装好了的一个URL重写组件(UrlReswriter.jar)来实现的,导入JAR包,在WEB服务中加载伪静态地址拦截器,客户端以静态地址向服务器发起请求,服务器端的拦截器拦截客户端请求,查找XML...
伪静态文件实例
discuz X3 伪静态文件 http.ini
伪静伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则伪静态规则态我
java伪静态入门例子,非常适合初学者 <from>/show_(.*)_(.*) <to>/show?s=$1&n=$2.html</to> <outbound-rule> <from>show\?s=(.*)&n=(.*) <to>show_$1_$2.html</to> </outbound-rule>
ASP.NET伪静态的实现及伪静态的意义.
ISAPI_Rewrite,ISAPI_Rewrite用来实现伪静态,将动态网页通过重写URL的方法实现去掉动态网页的参数!它的行为是像Apache的mod_Rewrite ,但专为微软的Internet信息服务( IIS )。 IIS配置相当简单,配置好之后就有...
java/jsp网站实现伪静态,把.jsp伪装成.html,资源包含Demo和jar包
这里提供了一个有关java实现的文件静态的处理方法