1. IIS過濾器,怎麼能捕獲到請求的URL並修改後轉向
核心提示:ISAPI的網站,URL地址為: 「http://www.test.com/disapi.dll/blist?aa=123&bb=456」 我想做個IIS過濾器,獲得這個地址串,進行一些訪問許可權的操作...我從網上找到一些資料,用GetFilterVersion和HttpFilterProc寫了
一個過濾器,可是取不到全部地址串,只能取到「www.test.com」
如何才能取到全部地址串,並在處理後再分別轉向到不同的網址??
//------------向對方發回信息 兩種方案(1 發送 HTML內容給對方,2 打開伺服器已有文件內容給對方)---------------------
if URL_TempFile='' then
BEGIN
sMsg:='<head><title>IISColander(' + IISColanderSession.SessionWebUrl + ')為本站提供 防盜鏈 保護</title></head><body><h1>文件跳轉</h1>';
sMsg:=sMsg+'IISColander(' + IISColanderSession.SessionWebUrl + ')為本站提供 防盜鏈 保護 <a HREF=http://';
sMsg:=sMsg+ sWebSite +'/ErrorFile/' + IISColanderSession.SessionErrorFile_GetUrl +'?URL="'+ sURL + sQUERY_STRING +'">跳轉</a></body>';
sMsgLen:=length(sMsg);
Try
sHead:= 'Location: http://'+ sWebSite + '/ErrorFile/' + IISColanderSession.SessionErrorFile_GetUrl+'?URL="' + sURL + sQUERY_STRING+'"' + #13#10;
pfc.AddResponseHeaders(pfc,pchar(sHead),0);
sHead:= '302 IISColander(' + IISColanderSession.SessionWebUrl + ')為本站提供防盜鏈保據';
pfc.ServerSupportFunction(pfc, SF_REQ_SEND_RESPONSE_HEADER, PChar(sHead), 0, 0);
pfc.WriteClient(pfc, PChar(sMsg), sMsgLen, 0);
Except
IISColanderSession.WriteLog('Error: 防盜鏈回信息於對方操作失敗'); //日誌記錄點
End;
Result:=SF_STATUS_REQ_FINISHED;
End
Else
Begin
Try
IISColanderSession
2. java 過濾器
想要屏蔽jsp,
<filter-mapping>
<filter-name>IPFilter</filter-name>
<url-pattern/*</url-pattern>
</filter-mapping>
就行了
3. java 中 使用Filter過濾器 如何獲取URL中的數據,具體如下:
不知道你說的是什麼意思,你可以吧數據加在url上一起發送,在filter中用request.getParameter(「數據名稱」)獲得,request要轉為HttpServletRequest
4. 過濾器 問題
過濾器 首先在 web.xml中配置
<filter-mapping>
<filter-name>encoding(名字)</filter-name>
<url-pattern>/*(有效范圍/*代表所有,如果是/page/* 就代表請求page文件路徑下的所有請求 都會經過過濾器處理)</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encoding(對應上面的名字)</filter-name>
<url-pattern>com.test.CharEncoding(過濾器所在位置)</url-pattern>
</filter-mapping>
然後是過濾器寫法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//獲得HttpServletRequest
HttpServletRequest req=(HttpServletRequest)request;
//講所有經過這個 過濾器處理的請求的編碼設置為utf-8
req.setCharacterEncoding("UTF-8");
//設置完之後 就繼續運行程序
chain.doFilter(request, response);
}
如果程序好吧 一條河流 水在一直往下流
過濾器 就是 在指定位置上 放了個濾網
你要知道
chain.doFilter(request, response);
是什麼意思 就要知道 web 程序運行 原理
客戶端 訪問web程序 是通過提交一個請求到
web伺服器 即request(訪問方式有 get post..等 訪問內容...想深入了解自己查,我這寫不了這么多)
然後web 伺服器 通過request 請求的方式和內容
進行操作,並返回
相應的結果(response) 給客戶端(一般式返回一個jsp結果頁面)
就是這么一個 過程
過濾器中的方法
就是 將 客戶端的 請求(request)進行 「過濾」
然後 將過濾後得到的的request 繼續由web程序里的
其他組件完成後續工作 返回結果
而調用 chain.doFilter(request, response);
就是讓 "過濾"後的request 繼續執行,
進入其他 web程序組件中
當然 如果你不寫這句話
request走到這個地方 就會停止
5. 在JAVA中的如何在過濾器中取到每一個URL請求
直接/* 攔截所以請求
6. java中 如何獲取客戶端請求的url
在servlet中的request對象中有url,可以用方法 getRequestURI().
如果在程序中得不到該請求的request對象內 那就得不到。
所以得到容url的 關鍵是 先得到 request
7. JSP過濾器這樣設置過濾一個次級路徑下的所有URL
/sites/*這樣就可以了,如果這個文件夾是某個子目錄的話還需要添加它的父目錄;
下面內是些例子
<url-pattern>:指定和過濾器關聯容的URL,為」/*」表示所有URL;
例子1:單個過濾器配置:容器將其應用於所有接收的請求
<url-pattern>/*</url-pattern>
例子2:過濾器應用到特定目錄或資源(文件)的配置:此容器只有在接收到對/mydocs目錄中的資源的請求時才會應用該過濾器。
<url-pattern>/mydocs/*</url-pattern>
8. java filter 如何中獲取請求地址
當我們訪問index.jsp/時,其實並不是我們瀏覽器真正訪問到了伺服器上的index.jsp 文件,而是先由代理伺服器去訪問index.jsp。
代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問index.jsp的。
所以index.jsp中通過 request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。
於是可得出獲得客戶端真實IP地址 的方法:
9. JSP中用filter 過濾某個包中的所有servlet
web.xml中這樣配置:
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>com.zq.servlet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/servlet/Login</url-pattern>
</servlet-mapping>
或者不配置web.xml在servlet中寫註解:
@WebServlet("/servlet/Login")
配置fliter可以在web.xml中這樣寫:
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.zy.filter.UserLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
或者不配置web.xml在filter中寫註解:
@WebFilter(filterName="/MyFilter",urlPatterns="/servlet/*")
即在所有想過濾的servlet名字前加上「/setvlet」在過濾的時候過濾路徑就可以寫成「/servlet/*」這樣就能過濾所有的Servlet。
10. JAVA過濾器ServletRequest如何轉換成HttpServletRequest
問題1:
org.apache.catalina.connector..servlet.http.HttpServletRequest
錯誤提示似乎挺明顯的了,說一個類型不能強制轉化為另一個類型。
待轉型類型是:org.apache.catalina.connector.ResponseFacade
目標類型是:javax.servlet.http.HttpServletRequest
我想你應該看出來了,ResponseFacade -->HttpServletRequest肯定是不行的?
也就是說你是用的那個arg1肯定是一個response,你寫錯了而已。
改過來就好。也建議你把arg這種的參數名字寫作res或者rep比較容易識別,並且可以提高代碼可讀性的變數名。
問題2:
關於過濾器實現地址的攔截,那麼首先獲得請求的地址,也就是通過request對象,它有好多個獲得url的不同不同部分的方法。比如可以使用getServletPath()方法獲得請求的路徑,然後判斷是否合法,不合法跳轉到指定頁面,合法那麼繼續chain.doFilter()。