javaWeb 使用jsp標籤進行防盜鏈

/**
 * 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>
相關文章
相關標籤/搜索