zoukankan      html  css  js  c++  java
  • 使用UrlRewriteFilter对url进行更替

    一般来说,使用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 匹配数字
           匹配单词的开始或结束
          ^ 匹配字符串的开始
          $ 匹配字符串的结束

  • 相关阅读:
    arrayAppend.php
    C语言中一个语句太长用什么换行?
    date
    Mysql复制一条或多条记录并插入表|mysql从某表复制一条记录到另一张表
    Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest
    javascript:location=location;">刷新</a>
    TestAbstract
    scanner=new Scanner(System.in); int i=scanner.nextInt();
    public static void Swap2
    JIRA 模块 bug管理工具
  • 原文地址:https://www.cnblogs.com/keyi/p/6182288.html
Copyright © 2011-2022 走看看