简单标签解决防盗链问题源码

简单标签解决防盗链问题

一 思路分析

防盗链就是不让自己的网站通过别的网站访问,而应该是通过自己网站的首页再访问自己网站的东西

下面创建了两个jsp页面,一个java页面,jsp页面是为了模拟首页和点击首页进去的网页。Java页面是编写标签处理器

二 源码

1.创建标签处理器

类名为RefererTag.java

public class RefererTag extends SimpleTagSupport {

private String site;

private String page;

public void setSite(String site) {

this.site = site;

}

public void setPage(String page) {

this.page = page;

}

@Override

public void doTag() throws JspException, IOException {

// 获取request对象

JspContext jc = this.getJspContext();

PageContext pc = (PageContext) jc;

HttpServletRequest request = (HttpServletRequest) pc.getRequest();

HttpServletResponse response = (HttpServletResponse) pc.getResponse();

String referer = request.getHeader("referer");

if (referer == null || !referer.startsWith("http://localhost")) {

// 跳转到首页

//获取地址的完整路径

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();

}

}

2.部署tld文件为:dhw.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/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>1.2</jsp-version>

<short-name>dhw</short-name>

<uri>http://www.dhw.com</uri>

<tag>

<name>referer</name>

<tag-class>com.hbsi.web.tag.project.RefererTag</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>

3. 创建TestReferer.jsp页面和index.jsp页面(首页)

(1)TestReferer.jsp---是应该通过首页访问到的页面,如果没有经过首页就访问,则会跳转到首页,在标签处理器中判断

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib uri="http://www.dhw.com" prefix="dhw"%>

<!-- 防盗链的网站和跳转的页面 -->

<dhw:referer site="http://localhost" page="/index.jsp"/>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'TestReferer.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>明星信息----------------

</body>

</html>

(2)index.jsp----首页

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'index.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>

This is my JSP page. <br>

<a href="/CustomerTagDemo/example/TestReferer.jsp">明星档案</a>

</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值