UrlRewrite 关于地址重写来增加安全性

简介

UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址。

为了访问方便,防止用户在url后乱加参数等安全原因,有时候需要对网站的访问路径进行伪装,如把

   http://localhost:8080/datasystem/portal/toIndex.do    伪装成     http://localhost:8080/datasystem/index.html

 

优点

(1)提高安全性 
     可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多。 
(2)美化URL 
     去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL 
(3)利于搜索引擎的收入 
     通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息

 

使用步骤

    1、下载jar

     普通web项目

           官方地址:http://tuckey.org/urlrewrite/ 

           下载链接:http://central.maven.org/maven2/org/tuckey/urlrewritefilter/4.0.3/urlrewritefilter-4.0.3.jar
           下载urlrewritefilter-4.0.3.jar,加入到工程lib目录下。

    maven项目  添加下面这段代码到你的pom.xml中就行

  
   org.tuckey
   urlrewritefilter
   4.0.3

   2、配置web.xml

 
   
     UrlRewriteFilter 
     org.tuckey.web.filters.urlrewrite.UrlRewriteFilter 
   
   
   
     UrlRewriteFilter 
     /* 
     REQUEST 
     FORWARD 
  

 3、配置urlrewrite.xml    (新建一个urlrewrite.xml 到工程的WEB-INF目录下)。   


 
 
     
        
         /index.html  

        
         /portal/toIndex.do
        
        
     

   forward和redirect都可以用,但forward访问完后还是不会显示真实访问地址,个人感觉好一些

  

  示例:

     1、使用正则表达式匹配(rule 的默认匹配方式是正则表达式)


       ^/demo/(\w+).html$//客户端访问的地址:http://127.0.0.1:8080/Struts/demo/hello.html
       /Struts/$1//实际访问的地址:http://127.0.0.1:8080/Struts/hello

解析:

   rule  是urlrewrite下的子节点,是urlrewrite的主要规则节点,在它里面包含from 和to两个子节点,from表示请求的URL,to表示将转到的真实的URL。


    ^/news/([0-9]+).html$
    /news/news.jsp?newsId=$1

 

  标签中的配置:

  中的地址表示我们浏览器要访问的地址(即敲回车前在地址栏输入的地址,或者标签指向的连接),可以自己指定。

      中的地址内,括号里的内容为正则表达式,用来过滤字符,比如 ^/news/([0-9]+).html$ 表示可以匹配/news目录下以任意位数字命名的.html文件,如news/1.html、news/1234.html等。主要用于过滤访问路径或传参。

        中的type如果不写,则默认为forward。

  中的内容表示浏览器访问了上述地址后,实际转向能真正访问系统的地址,这个地址需要是真是存在的(当然SpringMVC可以设置为Controller的地址,struts2可以设置为action的地址等),上面例子标签指向的地址中的“$1”表示标签中的第一处正则表达式所匹配的实际内容(即 ([0 - 9]+)  ),利用这一特性,可以达到传参的效果。


     ^/demo1/(\w+)/(\w+).html$
     /Struts/$1.action?age=$2

     标签所起到的作用就是:浏览器访问的是中的地址,它把这个地址经过过滤转向访问中地址,返回时再以静态地址的方式显示。

    但一般情况下,这些静态地址都不是我们手动输入到地址栏的,而是存在于网页中,由用户点击访问的,而且很多情况下标签中的地址都会用动态地址如.jsp、.php等,这种情况下,就需要使用了。


    ^/news/([0-9]+).html$
    /news/news.jsp?newsId=$1





      ^/WebTest/news/news.jsp\?newsId=([0-9]+)$
      /WebTest/news/$1.html

 你会发现的配置,其中的标签中的内容差不多与上面的标签刚好相反。

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>




首页


    


     上面对”新闻1”链接的配置就是如此,jsp通过获取news的值,给用户展现的就是一个静态地址了,相当于比直接访问静态页面多走了两步,urlrewrite.xml中具体执行顺序如下

  UrlRewrite 关于地址重写来增加安全性_第1张图片

    a标签的href 链接指向标签中的地址,继而通过各种转向,最终执行到真正的动态地址。

   温馨提示:一些特殊字符在中需要转义哦!比如“?”需要转义成“\?”,“&”需要转义成“& ;”……

 

该博客转载自:

      作者:Benett-Chen

      链接:https://blog.csdn.net/sky_100/article/details/53410013

 

      如果有遇到不懂或者有问题时,可以扫描下方二维码,欢迎进群交流与分享,希望能够跟大家交流学习!

                                                 

你可能感兴趣的:(JavaWeb技术)