/** * 1.新建類繼承SimpleTagSupport * 新建2個屬性, 添加對應的set方法 * 覆蓋doTag()方法 */ import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.SkipPageException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class RefererTag extends SimpleTagSupport { private String webSite; private String jumpPage; public void setWebSite(String webSite) { this.webSite = webSite; } public void setJumpPage(String jumpPage) { this.jumpPage = jumpPage; } @Override public void doTag() throws JspException, IOException { PageContext pageContext = (PageContext) this.getJspContext(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); String webRoot = request.getContextPath(); // 獲得 referer String referer = request.getHeader("referer"); if (referer == null || !referer.startsWith(webSite)) { // 是盜鏈者 if (jumpPage.startsWith(webRoot)) { // "/web/index.jsp" response.sendRedirect(jumpPage); } else if (jumpPage.startsWith("/")) { // "/index.jsp" response.sendRedirect(webRoot + jumpPage); } else {// "index.jsp" response.sendRedirect(webRoot + "/" + jumpPage); } throw new SkipPageException();// 若是是盜鏈者,就拋出這個異常 } } }
<?xml version="1.0" encoding="UTF-8" ?> <!-- 文件名 /WEB-INF/referer.tld --> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>anyName</short-name><!-- 這個值能夠任意設置 --> <uri>anyUri</uri><!-- 這個Uri能夠任意設置,可是不要與別的 .tld 文件相同 --> <tag> <name>referer</name> <tag-class>de.bvb.web.tag.RefererTag</tag-class> <body-content>empty</body-content> <!-- 不要標籤體 --> <attribute> <name>webSite</name><!-- 須要添加前面設置的2個屬性 --> <required>true</required><!-- required表示是否必須 --> <rtexprvalue>true</rtexprvalue><!-- rtexprvalue表示屬性的值是否可使用el表達式 --> </attribute> <attribute> <name>jumpPage</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="referer" uri="/WEB-INF/referer.tld"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- 3.設置好標籤庫之後添加下面這行標籤就能夠進行防盜鏈了。 webSite表示不設置防盜鏈的站點,jumpPage表示發現盜鏈之後跳轉的頁面 --> <referer:referer webSite="http://localhost" jumpPage="index.jsp" /> <html> <head> <title>經過jsp標籤進行防盜鏈</title> </head> <body>某某某的文章</body></html>