自定义标签写防盗链

61 篇文章 0 订阅
26 篇文章 0 订阅

大概讲述下:

第一点:给标签赋两个属性,一为这个页面前一个页面应该是什么,二为需要跳转到的页面

第二点:在对应的java类中,String referer=request.getHeader("referer"); 可以得到访问本页面的前一个页面的 url 并进行判断,执行是否跳转的指令

第三点:在tld中配置相应属性


这个可以直接拿去用

public class Refer extends SimpleTagSupport {
	private String site;
	private String page;
	public String getSite() {
		return site;
	}
	public void setSite(String site) {
		this.site = site;
	}
	public String getPage() {
		return page;
	}
	public void setPage(String page) {
		this.page = page;
	}
	@Override
	public void doTag() throws JspException, IOException {
		PageContext pc=	(PageContext) this.getJspContext();
		HttpServletRequest request=(HttpServletRequest) pc.getRequest();
		HttpServletResponse response=(HttpServletResponse) pc.getResponse();
		
		String referer=request.getHeader("referer");
		if(referer==null||!referer.startsWith(site))
		{
			if(page.startsWith(request.getContextPath()))
				response.sendRedirect(page);
			else if(page.startsWith("/"))
				response.sendRedirect(request.getContextPath()+page);
			else
				response.sendRedirect(request.getContextPath()+"/"+page);
			throw new SkipPageException();
		}
		else{
			
		}

	}

}

tld文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>debug</short-name>
  <uri>http://www.example.com</uri>


   <tag>
    <name>referer</name>
    <tag-class>com.example.Refer</tag-class>
    <body-content>empty</body-content>
    <attribute>
   		 <name>site</name>
   		 <required>true</required>
   		 <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
   		 <name>page</name>
   		 <required>true</required>
   		 <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  
</taglib>
jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.example.com" prefix="wan" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<wan:referer site="http://localhost" page="index.jsp"/>
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'example.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    
   	大神的人生规划:XXXXXOOOOO
   	
  </body>
</html>












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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值