UrlRewrite 关于地址重写来增加安全性
2016-11-28 09:15
267 查看
UrlRewrite 关于地址重写来增加安全性
一、UrlRewrite的基本环境搭建
首先导入urlrewrite-3.2.0.jar包,然后在web.xml里面声明Filter
1、使用正则表达式匹配(rule
的默认匹配方式是正则表达式)
解析:
rule
是urlrewrite下的子节点,是urlrewrite的主要规则节点,在它里面包含from 和to两个子节点,from表示请求的URL,to表示将转到的真实的URL。
2、使用通配符匹配
转发模式:forward方式跳转
重定向模式:redirect方式跳转
示例:
如上述设置,要实现匹配规则是执行某个函数,需要添加多一个run节点,在节点上面添加对应的类属性和方法属性。同时,对应的类必须继承RewriteRule类,执行的方法必须传入两个参数,分别是HttpServletRequest 和HttpServletResponse
除了对请求的URL进行处理外,UrlRewrite还提供了对返回页面中的地址进行重写的功能。使用rule是对用户输入的url进行处理,但是开发过程中,经常需要在页面中也添加一些网址请求,UrlRewrite可以通过规则,对页面中的网址也进行重写。如:
一、UrlRewrite的基本环境搭建
首先导入urlrewrite-3.2.0.jar包,然后在web.xml里面声明Filter
<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> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>然后在项目的WEB-INF目录下新建一个urlrewrite.xml文件,如下:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd"> <urlrewrite> //这里配置地址重写的规则 </urlrewrite>示例:
1、使用正则表达式匹配(rule
的默认匹配方式是正则表达式)
<rule> <from>^/demo/(\w+).html$</from>//客户端访问的地址:http://127.0.0.1:8080/Struts/demo/hello.html <to type="redirect">/Struts/$1</to>//实际访问的地址:http://127.0.0.1:8080/Struts/hello </rule>
<rule>
<from>^/demo1/(\w+)/(\w+).html$</from> <to type="redirect" >/Struts/$1.action?age=$2</to> </rule>
解析:
rule
是urlrewrite下的子节点,是urlrewrite的主要规则节点,在它里面包含from 和to两个子节点,from表示请求的URL,to表示将转到的真实的URL。
2、使用通配符匹配
转发模式:forward方式跳转
<rule match-type="wildcard"> <from>/demo2/*/*</from> <to type="forward>/Struts/$1.action?age=$2</to> </rule>
重定向模式:redirect方式跳转
<rule match-type="wildcard"> <from>/demo2/*/*</from> <to type="redirect">/Struts/$1.action?age=$2</to> </rule>除了支持指定规则的跳转外,UrlRewrite还支持当匹配规则的时候执行某个对象的某个函数
示例:
<rule> <from>^/demo3/(\w+)/(\w+).html$</from> <run class="com.sean.action.Demo" method="log" />//匹配规则后,指定的函数只在第一次匹配成功的时候执行 <class-rule class="com.sean.action.Demo" method="log2"/>//每次匹配规则后,指定的函数都会执行一次 <to type="redirect" >/Struts/$1.action?age=$2</to> </rule>
如上述设置,要实现匹配规则是执行某个函数,需要添加多一个run节点,在节点上面添加对应的类属性和方法属性。同时,对应的类必须继承RewriteRule类,执行的方法必须传入两个参数,分别是HttpServletRequest 和HttpServletResponse
//记得要继承RewriteRule类
public class Demo extends RewriteRule{ public void log(HttpServletRequest request,HttpServletResponse response){ System.out.println("haha1"); } public void log2(HttpServletRequest request,HttpServletResponse response){ System.out.println("haha2"); } }这样,当客户端输入的网址第一次匹配到指定规则的时候,UrlRewrite就会执行对应的函数,该函数只在第一次匹配成功的时候执行。
除了对请求的URL进行处理外,UrlRewrite还提供了对返回页面中的地址进行重写的功能。使用rule是对用户输入的url进行处理,但是开发过程中,经常需要在页面中也添加一些网址请求,UrlRewrite可以通过规则,对页面中的网址也进行重写。如:
<outbound-rule match-type="regex"> <from>/(\w+).action\?id=(\w+)$</from> <to>/$1.html</to> </outbound-rule>在UrlRewrite中添加该规则后,我们在页面中原本的地址是:
<a href="<c:url balue='/demo.action>id=111' />"> 测试</a>可是在页面中显示却成了如下:
<a href="/Struts/demo.html">测试</a>这样可以隐藏了许多开发中的技术,较为安全。
相关文章推荐
- Discuz!NT 的URL地址重写(URLRewrite)
- Discuz!NT 的URL地址重写(URLRewrite) (转)
- urlrewrite地址重写的使用
- urlrewrite 地址重写
- UrlRewrite地址重写
- 关于UrlRewrite重写url
- Maven下 urlrewrite 地址重写
- URLRewrite,地址重写.
- URLRewrite实现地址重写
- urlrewrite使用地址重写
- 关于地址重写的几篇文章
- Discuz!NT 的URL地址重写(URLRewrite)
- Discuz!NT 的URL地址重写(URLRewrite)
- urlrewrite 地址重写
- urlrewrite地址重写之后丢失css和js解决方案
- Discuz!NT 的URL地址重写(URLRewrite)
- 关于URL的地址重写,自己也实验了一把!
- Discuz!NT 的URL地址重写(URLRewrite)
- UrlRewrite地址重写
- urlrewrite 地址重写