UrlRewriteFilter - 把动态URL修改成伪静URL的配置

Phoenix Phoenix 2018.1.20 00:00 浏览(562) 评论 (0)

一般来说,使用struts之后url的访问实际上访问的是action的地址,为了不让该地址暴露给别人,可以采用UrlRewriteFilter来对url进行重写。

首先,在web.xml里面配置:

 

<filter>
	<filter-name>UrlRewriteFilter</filter-name>
	<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
	<init-param>
		<param-name>confReloadCheckInterval</param-name>
		<param-value>60</param-value>
	</init-param>
	<init-param>
		<param-name>confPath</param-name>
		<param-value>/WEB-INF/urlrewrite.xml</param-value>
	</init-param>
</filter>

<filter-mapping>
	<filter-name>UrlRewriteFilter</filter-name>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
	<url-pattern>/*</url-pattern>
</filter-mapping>

 

注意,要在struts的mapping里面加上,要不然会出错的!这个花了我半天才搞定。还有一点:UrlRewriteFilter要放在struts Filter之前。web.xml里面过滤器需要讲究顺序,一般是这样子的顺序:字符编码过滤器,hibernate open session in view 过滤器,Urlrewrite过滤器,struts过滤器。

 

<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>

 

然后在WEB-INF里面新建urlrewrite.xml文件,该文件为UrlRewriteFilter的配置文件,通过在里面定义rule规则对URL进行更替。

下面是urlrewrite.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
        "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
    <rule>
        <!-- 地址栏显示的地址 -->
        <from>/anything</from>
        <!-- 真实的请求地址 -->
        <to>/url/test.action</to>
    </rule>
</urlrewrite>

 

以上只是简单的实现,具体的替换需要用到正则表达式。

如下例:

 

<from>/content/([0-9]+)/list</from> 
<to type="forward">
   /IssuedContentAction.do?dispatch=vContentListBySubid&amp;scope=vmcontent&amp;columninfoid=$1
</to>

 

需要注意的地方是:用括号括起来的正则表达式为变量,如to标签里面的$1表示的是上面from里面的第一个括号内容。url里面的参数间隔符 ‘&’应该写为‘&amp;’。

值得注意的是<outbound-rule>标签,可以使用该标签替换页面里面的url。

简单的正则表达式:

. 匹配除换行符以外的任意字符
      \w 匹配字母或数字或下划线或汉字
      \s 匹配任意的空白符
      \d 匹配数字
      \b 匹配单词的开始或结束
      ^ 匹配字符串的开始
      $ 匹配字符串的结束

本文链接 https://www.mangoxo.com/blog/4z5KEBxn 版权所有,转载请保留地址链接,感谢!

Phoenix 关注
來一遭,做一事。 等一人,愛一次。
  • 966 动态
  • 1,989 相册
  • 127 粉丝
  • 3,050 获赞