記得一次面試,有這樣一道面試題:
jsp頁面當中需要用到ajax的實現,此時需要調用java的url;此時的問題是如果用戶查看頁面源碼就能看到真是的url,這個問題如何避免。
說實話,AJAX我用的只是皮毛,只會用js獲取參數,然后傳遞給java應用程序,由應用程序來加工處理。如果有返回需求的話,可以以xml的方式返回數據。
自己使用的時候沒有考慮過url暴露的問題,看到這個題目,當時沒有了注意。下來想想,我自己的想到的實現方法是這樣的,就是指定自己的一套規則,然后頁面上寫的url按照規則來組織,然后傳到一個中間件上:這個中間件的功能就是解析這些url,得到最終的真實的url,然后由由這個中間件轉到相應的請求上去處理。
最近聽同學說,好像url重寫可以更好的實現,就看了一下
1.下載urlrewrite,官方下載地址:http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip
2.將以下代碼添加到web.xml里
Xml代碼
<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>
3.建立一個 urlrewrite.xml
1<?xml version="1.0" encoding="utf-8"?>
2<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
3 "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
4<urlrewrite>
5 <rule>
<from>^/world/(.*)$</from>
<to>/world.jsp?tid=$1</to>
</rule>
9</urlrewrite>
rule是url重寫規則,from是顯示出來的地址,to是映射的實際地址,$1是重寫參數,可以為多個,()里是匹配的正則表達式.
在項目中新建world.jsp,啟動tomcat,輸入
http://localhost:8080/mysite/world/1
mysite是你的項目名
實際上訪問的是http://localhost:8080/mysite/world.jsp?tid=1
這樣就簡單的實現了偽靜態的效果
在ajax當中,var url = "";這個地方寫個虛擬的訪問路徑,然后將解析規則用正則表示到urlrewrite.xml當中,那么到后台的時候,就可以自動解析成真實的路徑,從而達到對url的保護。