用自定義標籤實現防盜鏈的操作

      添加簡單防盜鏈操作即限制引用頁,作用原理:獲取用戶提交信息的網站地址,然後和真正的服務端的地址相比較,如果一致則表明是站內提交,或者爲自己信任的站點提交,否則視爲盜鏈。

步驟:定義標籤處理類;定義描述文件;在內容頁面使用標籤

部分代碼:

定義標籤處理類

		PageContext pageContext = (PageContext) this.getJspContext();
		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
		HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
		
		//通過頭信息得到站點信息
		String referer = request.getHeader("referer");
		System.out.println(referer);
		
		/*防盜鏈的具體操作處理類
		 * 判斷是否爲盜鏈
		 * 如果訪問站點爲空或訪問站點不是site開頭的*/
		if(referer == null || !referer.startsWith(site)){
			//如果是盜鏈,根據page屬性值,將盜鏈重定向指向訪問被盜鏈內容的正確頁面
			String contextPath = request.getContextPath();
			System.out.print(contextPath);
			
			if(page.startsWith(contextPath)){
				response.sendRedirect(page);
			}else if(page.startsWith("/")){
				response.sendRedirect(contextPath+page);
			}else{
				response.sendRedirect(contextPath+"/"+page);
			}
			//拋出異常
			throw new SkipPageException();
		}


 

定義描述文件:

	<tag>
        <description>referer demo</description>
        <name>referer</name>
        <tag-class>cn.csdn.web.Tag.Referer</tag-class>
        <body-content>empty</body-content>
   
	   	<attribute>
	   		<name>site</name>
	   		<required>true</required>
	   		<!-- 指定屬性值是否在JSP運行時自動產生,true爲自動產生,false爲不自動產生 -->
	   		<rtexprvalue>true</rtexprvalue>
	   	</attribute>
	   	
	   	<attribute>
	   		<name>page</name>
	   		<required>true</required>
	   		<!-- 指定屬性值是否在JSP運行時自動產生,true爲自動產生,false爲不自動產生 -->
	   		<rtexprvalue>true</rtexprvalue>
	   	</attribute>
   	
   	 </tag>


 

在內容頁面使用標籤:

	<%@ taglib uri="http://cn.csdn.web.tag" prefix="tag"%>

	<!-- 控制整個頁面時無標籤體,是單個標籤聲明 -->
	<!--site:受信任站點,只允許次站點的請求	page:正確的鏈接頁面,發現盜鏈後將其自動轉入此頁面-->
	<tag:referer site="http://localhost:8080/20111109" page="index.jsp"/>


 

發佈了62 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章