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

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

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

部分代码:

定义标签处理类

		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"/>


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值