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>
时间: 2024-12-28 08:29:50

javaWeb 使用jsp标签进行防盗链的相关文章

3_Jsp标签_简单标签_防盗链和转义标签的实现

一概念 1防盗链 在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件,通过referer,网站可以检测目标网页访问的来源网页.有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面. 2页面中的转义字符 在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用.为了在HTML文档中使用这些符号,就

深入分析JavaWeb Item15 -- jsp标签

一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 jsp的常用标签有以下三个 <jsp:include>标签 <jsp:forward>标签 <jsp:param>标签 2.1.<jsp:include>标签 <jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容

javaweb之jsp标签

1.JSP标签简介 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 2.JSP常用标签 <jsp:include>标签 <jsp:forward>标签 <jsp:param>标签 2.1 <jsp:include>标签 <jsp:include>标签用于把另外一个资源的输出内容插入进当前jsp页面的输出内容之中,这种在jsp页面执行时

标签案例-开发防盗链标签

1 package cn.itcast.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import javax.servlet.jsp.JspException; 8 import javax.servlet.jsp.PageContext; 9 import

实现一个基本防盗链标签

1. 标签处理类 1 public class MyReferer extends BodyTagSupport { 2 private String site; 3 private String back; 4 public String getSite() { 5 return site; 6 } 7 public void setSite(String site) { 8 this.site = site; 9 } 10 public String getBack() { 11 retur

javaweb学习总结(十九)——JSP标签

一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 jsp的常用标签有以下三个 <jsp:include>标签 <jsp:forward>标签 <jsp:param>标签 2.1.<jsp:include>标签 <jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容

JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次都要先创建这些对象,然后再去使用它们,这样就显得十分繁琐了,为了方便使用者,Sun公司在开发JSP的时候,把一些对象设置为内置对象,开发者在JSP页面编程的时候不必声明这些对象就能直接使用,这就是JSP的内置对象. 那么JSP对象有哪些呢? JSP内置对象          对应的类型   备注 R

javaWeb学习总结(8)- JSP标签(6)

一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 jsp的常用标签有以下三个 <jsp:include>标签 <jsp:forward>标签 <jsp:param>标签 2.1.<jsp:include>标签 <jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容

深入分析JavaWeb Item25 -- 自定义标签开发案例和打包自定义标签库

一.开发标签库案例 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java package me.gacl.web.simpletag; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import jav