用自定义标签实现防盗链的操作

      添加简单防盗链操作即限制引用页,作用原理:获取用户提交信息的网站地址,然后和真正的服务端的地址相比较,如果一致则表明是站内提交,或者为自己信任的站点提交,否则视为盗链。

步骤:定义标签处理类;定义描述文件;在内容页面使用标签

部分代码:

定义标签处理类

		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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章