添加簡單防盜鏈操作即限制引用頁,作用原理:獲取用戶提交信息的網站地址,然後和真正的服務端的地址相比較,如果一致則表明是站內提交,或者爲自己信任的站點提交,否則視爲盜鏈。
步驟:定義標籤處理類;定義描述文件;在內容頁面使用標籤
部分代碼:
定義標籤處理類
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"/>